rt
#include <bits/stdc++.h>
#define rep(i,l,r) for (int i = l; i <= r; i++)
#define per(i,r,l) for (int i = r; i >= l; i--)
#define fi first
#define se second
#define prt std::cout
#define gin std::cin
#define edl std::endl
namespace wxy{
const int N = 5e6 + 10;
int f[N],sum[N],cnt[N],q[N];
int n,m,hh,tt;
inline int gety(int x){
return sum[x] - f[x] - cnt[x] * x;
}
inline void insert(int idx){
int y1 = gety(q[tt-1]),y2 = gety(q[tt]),x1 = q[tt-1],x2 = q[tt];
int yins = gety(idx);
while (hh < tt && (y1 - y2) * (x1 - idx) >= (y1 - yins) * (x1 - x2)) tt--;
q[++tt] = idx;
}
inline void main(){
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
gin >> n >> m; int maxv = 0,ans = INT_MAX;
rep(i,1,n){
int x; gin >> x;
cnt[x]++; maxv = std::max(maxv,x);
}
rep(i,0,maxv+m){
sum[i] = i * cnt[i];
if (i > 0) {
sum[i] += sum[i-1];
cnt[i] += cnt[i-1];
}
}
rep(i,0,m) f[maxv + i] = 0;
hh = 0; tt = 0; q[0] = maxv + m;
per(i,maxv-1,0){
insert(i + m);
while (hh < tt && cnt[i] * (q[hh] - q[hh+1]) <= gety(q[hh+1]) - gety(q[hh])) hh++;
int j = q[hh]; f[i] = (cnt[j] - cnt[i]) * j + f[j] - sum[j]; f[i] += sum[i];
}
rep(i,0,maxv)
ans = std::min(ans,f[i] + cnt[i] * i - sum[i]);
prt << ans;
}
}signed main(){wxy::main(); return 0;}