#include<bits/stdc++.h>
#define ll long long
#define inf 0x7fffffff
#define un unsigned
#define ull un ll
#define int ull
using namespace std;
#define maxn 50009
int n,l,a[maxn];
int f[maxn],g[maxn];
int q[maxn];
int Q(int x){return x*x;}
double Get(un j,un k)//求斜率
{
return ((f[j]+Q(g[j])+2*l*g[j])-(f[k]+Q(g[k])+2*l*g[k]))/(double)(g[j]-g[k]);
}
signed main()
{
scanf("%llu%llu",&n,&l);
l++;
int s=1,t=1;
int K;
q[s]=0;
for(int i=1;i<=n;i++)
{
scanf("%llu",&g[i]);
g[i]=g[i]+g[i-1];
}
for(int i=1;i<=n;i++)g[i]+=i;
for(int i=1;i<=n;q[++t]=i++)
{
K=g[i]<<1;
while(s<t&&Get(q[s+1],q[s])<=K) s++;
int j=q[s];
f[i]=f[j]+Q(g[i]-g[j]-l);
while(s<t&&Get(q[t],q[t-1])>=Get(i,q[t]))t--;
}
printf("%llu
",f[n]);
return 0;
}