#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define db double
#define N 1000100
#define jd (isdigit(c))
#define gg c=getchar()
#define inf 233333333333333
#define eps 1e-10
#define mod 1000000
#define ls k<<1
#define rs k<<1|1
#define root t[0].ch[1]
inline ll read()
{
ll f=0;bool x=1;char gg;
for(;!jd;gg)if(c=='-')x=0;
for(;jd;gg)f=(f<<1)+(f<<3)+(c&15);
return x?f:-f;
}
inline void write(ll x)
{
if(x<0)
{
putchar('-');
x=~x+1;
}
else if(!x)putchar('0');
char s[25];
int j=0;
for(;x;x/=10)s[j++]=x%10;
for(int i=j-1;~i;i--)putchar(s[i]+48);
putchar('\n');
}
ll n,l,dp[N],s[N],q[N],p[N];
inline db cal(ll x,ll y)
{
return (s[x]==s[y])?1e100:(p[y]-p[x])*1.0/(s[y]-s[x]);
}
int main()
{
while(~scanf("%lld%lld",&n,&l))
{
for(int i=1;i<=n;i++)
{
ll c=read();
s[i]=s[i-1]+c;
}
ll head=1,tail=0;
q[++tail]=0;
for(int i=1;i<=n;i++)
{
while(head<tail)
{
db tk=cal(q[head],q[head+1]);
if(tk<2*s[i])head++;
else break;
}
ll j=q[head];
dp[i]=dp[j]+(s[i]-s[j])*(s[i]-s[j])+l;
p[i]=dp[i]+s[i]*s[i];
while(head<tail&&cal(q[tail],i)<cal(q[tail-1],q[tail]))tail--;
q[++tail]=i;
}
write(dp[n]);
}
return 0;
}