#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5*1e5+5;
const ll inf=0x3f3f3f3f3f3f3f3f;
int n,m,lis[maxn],head,tail;
ll dp[maxn],a[maxn];
ll get_up(int i,int j)
{
return dp[j]+a[j]*a[j]-dp[i]-a[i]*a[i];
}
ll get_down(int i,int j)
{
return 2*(a[j]-a[i]);
}
void get_dp(int i,int j)
{
dp[j]=dp[i]+(a[j]-a[i])*(a[j]-a[i])+m;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%d",a+i);
a[i]+=a[i-1];
}
head=tail=0;
lis[tail++]=0;
for(int i=1;i<=n;i++)
{
while(head+1<tail&&get_up(lis[head],lis[head+1])<=a[i]*get_down(lis[head],lis[head+1]))
++head;
get_dp(lis[head],i);
while(head+1<tail&&get_up(lis[tail-1],i)*get_down(lis[tail-2],lis[tail-1])<=get_down(lis[tail-1],i)*get_up(lis[tail-2],lis[tail-1]))
--tail;
lis[tail++]=i;
}
printf("%lld\n",dp[n]);
}
return 0;
}
/*
5 5
5
9
5
7
5
*/