#include<iostream>
using namespace std;
const long long maxn = 50002;
long long que[maxn] , s[maxn] , f[maxn];
int n , l , qian = 1 , hou = 0;
long long K(int wz){
return 2 * (s[wz] - l);
}
long long Y(int wz){
return s[wz] ^ 2;
}
long long X(int wz){
return s[wz];
}
bool xl(int i){
long long x1 = X(que[qian]) , y1 = Y(que[qian]);
long long x2 = X(que[qian + 1]) , y2= Y(que[qian + 1]);
return (y2 - y1) < K(i) * (x2 - x1);
}
bool xll(int i){
long long x1 = X(que[hou]) , y1 = Y(que[hou]);
long long x2 = X(i) , y2 = Y(i);
long long x3 = X(que[hou - 1]) , y3 = Y(que[hou - 1]);
return (y2 - y3) * (x1 - x3) > (x2 - x3) * (y1 - y3);
}
int main(){
cin >> n >> l;
l --;
for (int i = 1 ; i <= n ; i ++){
cin >> s[i];
s[i] = s[i - 1] + s[i] + 1;
}
que[++hou] = 0;
for (int i = 1 ; i <= n ; i ++){
while(qian < hou && xl(i)) ++ qian;
f[i] = f[que[qian]] + (s[i] - l) ^ 2 + s[que[qian]] ^ 2 - 2 * (s[que[qian]] - l) * s[que[qian]];
while(qian < hou && xll(i)) -- hou;
que[++hou] = i;
}
cout << f[n] << endl;
return 0;
}