#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define EB emplace_back
#define MP make_pair
#define all(o) (o).begin(), (o).end()
#define mset(m,v) memset(m,v,sizeof(m))
#define fr(i,n) for(lli i=0;i<n;++i)
#define rep(i,a,b) for(lli i=a;i<=b;++i)
#define per(i,a,b) for(lli i=a;i>=b;i--)
#define remin(a,b) (a=min((a),(b)))
#define remax(a,b) (a=max((a),(b))) 
#define sz(x) (lli)(x).size()
#define endl '\n'
typedef long long lli;        typedef long double ld;
typedef pair<lli,lli> ii;     typedef vector<lli> vi;
typedef vector<ii> vii;       typedef vector<vi> graph;
long long MOD=1000000007;     long double EPS=1e-9;
#define debarr(a,n) cout<<#a<<" : ";for(int i=0;i<n;i++) cerr<<a[i]<<" "; cerr<<endl;
#define debmat(mat,row,col) cout<<#mat<<" :\n";for(int i=0;i<row;i++) {for(int j=0;j<col;j++) cerr<<mat[i][j]<<" ";cerr<<endl;}
#define pr(...) dbs(#__VA_ARGS__, __VA_ARGS__)
template <class S, class T>ostream& operator <<(ostream& os, const pair<S, T>& p) {return os << "(" << p.first << ", " << p.second << ")";}
template <class T>ostream& operator <<(ostream& os, const vector<T>& p) {os << "[ "; for (auto& it : p) os << it << " "; return os << "]";}
template <class T>ostream& operator <<(ostream& os, const unordered_set<T>& p) {os << "[ "; for (auto& it : p) os << it << " "; return os << "]";}
template <class S, class T>ostream& operator <<(ostream& os, const unordered_map<S, T>& p) {os << "[ "; for (auto& it : p) os << it << " "; return os << "]";}
template <class T>ostream& operator <<(ostream& os, const set<T>& p) {os << "[ "; for (auto& it : p) os << it << " "; return os << "]";}
template <class T>ostream& operator <<(ostream& os, const multiset<T>& p) {os << "[ "; for (auto& it : p) os << it << " "; return os << "]";}
template <class S, class T>ostream& operator <<(ostream& os, const map<S, T>& p) {os << "[ "; for (auto& it : p) os << it << " "; return os << "]";}
template <class T> void dbs(string str, T t) {cerr << str << " : " << t << "\n";}
template <class T, class... S> void dbs(string str, T t, S... s) {int idx = str.find(','); cerr << str.substr(0, idx) << " : " << t << ","; dbs(str.substr(idx + 1), s...);}
template <class T> void prc(T a, T b) {cerr << "["; for (T i = a; i != b; ++i) {if (i != a) cerr << ", "; cerr << *i;} cerr << "]\n";}
lli binpow(lli b,lli p,lli mod){lli ans=1;b%=mod;for(;p;p>>=1){if(p&1)ans=ans*b%mod;b=b*b%mod;}return ans;}

void pre(){

}

const lli is_query = -(1LL<<62); //maxhull
struct convex_line { lli m,b;
  mutable function<const convex_line*()> succ;
  bool operator<(const convex_line& rhs) const {
    if(rhs.b!=is_query) return m < rhs.m;
    const convex_line* s=succ(); if(s==NULL) return 0;
    lli x=rhs.m; return 1.0*(b-s->b)<1.0*(s->m-m)*x;
  }
};//declare variable of dcht struct
struct dcht : public multiset<convex_line> {
  bool invalid(iterator y) { auto z=next(y);
    if(y==begin()) {
      if (z==end()) return 0; return y->m==z->m && y->b<=z->b;
    } auto x=prev(y);
    if(z==end()) return y->m==x->m && y->b<=x->b;
    return 1.0*(x->b-y->b)*(z->m-y->m)>=1.0*(y->b-z->b)*(y->m-x->m);
  }void insert_line(lli m,lli b) {//insert any line
    auto y = insert({m,b});
    y->succ = [=] { return next(y) == end() ? 0 : &*next(y); };
    if (invalid(y)) { erase(y); return; }
    while (next(y) != end() && invalid(next(y))) erase(next(y));
    while (y != begin() && invalid(prev(y))) erase(prev(y));
  } void remove_line(lli m,lli b) {//erase line if possible
    auto y=find({m,b}); if(y==end()) return; erase(y);
  } lli eval(lli x) {//calli eval to find value at any x
    auto l=lower_bound({x, is_query});return (*l).m * x + (*l).b;
  }};

void solve(){
	lli n,c;
	cin>>n>>c;
	lli h[n];
	fr(i,n)cin>>h[i];
	lli dp[n];
	dp[0]=0;
	dcht dd;
	dd.insert_line(2*h[0],-(h[0]*h[0]+dp[0]));
	rep(i,1,n-1){
		dp[i]=-dd.eval(h[i])+h[i]*h[i]+c;
		dd.insert_line(2*h[i],-(h[i]*h[i]+dp[i]));
	}
	cout<<dp[n-1]<<endl;
}

signed main(){
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);
	pre();lli t=1;//cin>>t;
	for(lli i=1;i<=t;i++){
		//cout<<"Case #"<<i<<": ";
		solve();
	}
}

Measured memory_bytes: 22144