#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAX = 2e5 + 5;
struct line {
int a, b;
line(int a = 0, int b = 0) : a(a), b(b) {};
int operator () (const int &x) const {
return a * x + b;
}
};
namespace CHT {
line lines[MAX];
int l = 0, r = -1;
double insect(line &x, line &y) {
return 1.0 * (y.b - x.b) / (x.a - y.a);
}
void add(line newline) {
while (l <= r && r - l + 1 > 1 && insect(newline, lines[r]) <= insect(newline, lines[r - 1])) --r;
lines[++r] = newline;
}
int get(int x) {
while (l <= r && r - l + 1 > 1 && lines[l](x) > lines[l + 1](x)) ++l;
return lines[l](x);
}
};
int h[MAX], f[MAX];
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
// freopen("test.inp", "r", stdin); freopen("test.out", "w", stdout);
int n, c;
cin >> n >> c;
for (int i = 1; i <= n; i++) cin >> h[i];
f[1] = 0;
CHT::add(line(-2 * h[1], f[1] + h[1] * h[1]));
for (int i = 2; i <= n; i++) {
f[i] = CHT::get(h[i]) + h[i] * h[i] + c;
CHT::add(line(-2 * h[i], f[i] + h[i] * h[i]));
}
cout << f[n];
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGludCBsb25nIGxvbmcKCmNvbnN0IGludCBNQVggPSAyZTUgKyA1OwoKc3RydWN0IGxpbmUgewogICAgaW50IGEsIGI7CgogICAgbGluZShpbnQgYSA9IDAsIGludCBiID0gMCkgOiBhKGEpLCBiKGIpIHt9OwoKICAgIGludCBvcGVyYXRvciAoKSAoY29uc3QgaW50ICZ4KSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGEgKiB4ICsgYjsKICAgIH0KfTsKCm5hbWVzcGFjZSBDSFQgewogICAgbGluZSBsaW5lc1tNQVhdOwogICAgaW50IGwgPSAwLCByID0gLTE7CgogICAgZG91YmxlIGluc2VjdChsaW5lICZ4LCBsaW5lICZ5KSB7CiAgICAgICAgcmV0dXJuIDEuMCAqICh5LmIgLSB4LmIpIC8gKHguYSAtIHkuYSk7CiAgICB9CgogICAgdm9pZCBhZGQobGluZSBuZXdsaW5lKSB7CiAgICAgICAgd2hpbGUgKGwgPD0gciAmJiByIC0gbCArIDEgPiAxICYmIGluc2VjdChuZXdsaW5lLCBsaW5lc1tyXSkgPD0gaW5zZWN0KG5ld2xpbmUsIGxpbmVzW3IgLSAxXSkpIC0tcjsKICAgICAgICBsaW5lc1srK3JdID0gbmV3bGluZTsKICAgIH0KCiAgICBpbnQgZ2V0KGludCB4KSB7CiAgICAgICAgd2hpbGUgKGwgPD0gciAmJiByIC0gbCArIDEgPiAxICYmIGxpbmVzW2xdKHgpID4gbGluZXNbbCArIDFdKHgpKSArK2w7CiAgICAgICAgcmV0dXJuIGxpbmVzW2xdKHgpOwogICAgfQp9OwoKaW50IGhbTUFYXSwgZltNQVhdOwppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7Ci8vICAgIGZyZW9wZW4oInRlc3QuaW5wIiwgInIiLCBzdGRpbik7IGZyZW9wZW4oInRlc3Qub3V0IiwgInciLCBzdGRvdXQpOwogICAgaW50IG4sIGM7CiAgICBjaW4gPj4gbiA+PiBjOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gaFtpXTsKCiAgICBmWzFdID0gMDsKICAgIENIVDo6YWRkKGxpbmUoLTIgKiBoWzFdLCBmWzFdICsgaFsxXSAqIGhbMV0pKTsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IG47IGkrKykgewogICAgICAgIGZbaV0gPSBDSFQ6OmdldChoW2ldKSArIGhbaV0gKiBoW2ldICsgYzsKICAgICAgICBDSFQ6OmFkZChsaW5lKC0yICogaFtpXSwgZltpXSArIGhbaV0gKiBoW2ldKSk7CiAgICB9CgogICAgY291dCA8PCBmW25dOwogICAgcmV0dXJuIDA7Cn0K