#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#define ll long long
using namespace std;
ll n, l;
ll c[50001], dp[50001], v[50001], cnt = 1,x[50001],y[50001];
ll ti(ll z) {return z * z;}
ll check(ll k) {
ll l = 1, r = cnt, mid = (l + r) >> 1;
while (l <= r) {
mid = (l + r) >> 1;
ll L = v[mid], R = v[mid + 1];
if (k * (x[R] - x[L]) > (y[R] - y[L]))l = mid + 1;
else r = mid - 1;
}
return v[l];
}
int main() {
cin >> n >> l;
for (int i = 1; i <= n; i++) {
cin >> c[i];
c[i] += c[i - 1];
}
v[cnt] = 0;
for (int i = 1; i <= n; i++) {
ll j = check(2 * (i + c[i]));
dp[i] = dp[j] + ti(i - j - 1 + c[i] - c[j] - l);
x[i] = l + 1 + i + c[i];
y[i] = dp[i] + ti(x[i]);
while (cnt > 1) {
if ((y[i]-y[v[cnt]])*(x[v[cnt]]-x[v[cnt-1]])< (x[i] - x[v[cnt]]) * (y[v[cnt]] - y[v[cnt - 1]])) {
v[cnt] = 0;
cnt--;
}
else break;
}
v[++cnt] = i;
//cout<< dp[i] << " " << cnt << " " << x[i] << " " << y[i] << " " << j << "\n";
}
cout << dp[n];
}