#include <bits/stdc++.h>

using namespace std;

const int MAXN = 2e5 + 10;

long long dp[MAXN];

struct f {
	long long a, b;
	f(long long _a = 0, long long _b = 0) : a(_a), b(_b) {}
};

int chtSize = 0;
f cht[MAXN];

bool scot(f f0, f f1, f f2) {
	return 1.0*(f2.b - f0.b)/(1.0*(f0.a - f2.a)) <= 1.0*(f1.b - f0.b)/(1.0*(f0.a - f1.a));
}

long long eval(f f0, long long x) {
	return x*f0.a + f0.b;
}

int main() {
    #ifdef BLAT
        freopen("input", "r", stdin);
    #endif

   	int n;
   	cin >> n;
   	long long c;
   	cin >> c;

   	long long h;
   	cin >> h;

   	int chtNow = 1;
   	cht[++chtSize] = f(-2ll*h, h*h);
   	for(int i = 2; i <= n; ++i) {
   		cin >> h;
   		while(chtNow < chtSize && eval(cht[chtNow+1], h) < eval(cht[chtNow], h)) ++ chtNow;
   		dp[i] = 1ll*h*h + c + eval(cht[chtNow], h);
   		f acum(-2ll*h, dp[i] + 1ll*h*h);
   		while(chtSize > 1 && scot(acum, cht[chtSize-1], cht[chtSize])) chtSize --;
   		cht[++chtSize] = acum;
   		chtNow = min(chtNow, chtSize);
   	}

   	cout << dp[n] << '\n';
}   	