#include<bits/stdc++.h>
#define ll long long
#define fr first
#define sc second
#define lowbit(x) x&-x;
#define ls k<<1
#define rs k<<1|1
using namespace std;
const ll mod=1ll<<30;
const __int128 inf=(__int128)1<<120;
int n;
ll a[4000005],sum[4000005];
pair <__int128,ll> dp[4000005];
inline __int128 pw(ll x){
return (__int128)x*x;
}
vector <int> vec[4000005];
priority_queue <int> q;
inline int read(){
register int x=0,t=0;
static char ch=getchar();
while(!isdigit(ch)) t|=(ch=='-'),ch=getchar();
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return t?-x:x;
}
inline void write(__int128 x){
if(x>=10)write(x/10);
putchar('0'+x%10);return;
}
signed main(){
n=read(),read();
for(int i=1;i<=n;i++){
a[i]=read(),sum[i]=sum[i-1]+a[i];
dp[i]={inf,0};
}
q.push(0);
for(int i=1;i<=n;i++){
for(int j:vec[i]){
q.push(j);
}
int j=q.top();
dp[i]={dp[j].fr+pw(sum[i]-sum[j]),sum[i]-sum[j]};
int l=i,r=n,res=0;
while(l<=r){
int mid=l+r>>1;
if(sum[mid]>=dp[i].sc+sum[i]){
r=mid-1,res=mid;
}else l=mid+1;
}
if(res)vec[res].push_back(i);
}
write(dp[n].fr);
return 0;
}