rt
#include <bits/stdc++.h>
using namespace std;
map<int,bool> mp;
int a[200005],wt[200005],tw[200005];
int main() {
int n,m; cin >> n >> m;
if(n == 1) {
cout << m << endl;
return 0;
}
else if(n == 2) {
cout << 2 * m << endl;
return 0;
}
for(int i = 1;i <= n;i++) {
cin >> a[i];
}
sort(a+1,a+n+1);
a[0] = -m; a[n+1] = 2100000000;
int cnt = (a[2] - a[1]) + (a[n] - a[n-1]);
int ans = 0;
// for(int i = 1;i <= n;i++) cout << a[i] << " \n"[i == n];
for(int i = 2;i < n;i++) {
if((a[i-1]+m-1) >= a[i] && a[i+1] <= a[i]+m-1) {cnt += max(0,a[i+1]-(a[i-1]+m-1)); wt[i] = max(0,a[i+1]-(a[i-1]+m-1));}
else if((a[i-1]+m-1) >= a[i] && a[i+1] > a[i]+m-1) {cnt += a[i]-a[i-1]; wt[i] = a[i]-a[i-1];}
else if((a[i-1]+m-1) < a[i] && a[i+1] <= a[i]+m-1) {cnt += a[i+1]-a[i]; wt[i] = a[i+1]-a[i];}
else {cnt += m; wt[i] = m; }
}
// for(int i = 1;i <= n;i++) cout << wt[i] << " \n"[i == n];
// cout << cnt << endl << endl;
for(int i = 1;i <= n;i++) {
int siz = 0; //将当前的线段去掉之后新增的空白部分
if((i-1) != 0) {
if(a[i] <= (a[i-1]+m-1)) {
siz += (a[i-1]+m-1) - a[i];
if((i-2) != 0) {
if((a[i-2]+m-1) >= a[i]) siz -= (a[i-2]+m-1) - a[i];
}
}
}
if((i+1) != n+1) {
if((a[i]+m-1) >= a[i+1]) {
siz += (a[i]+m-1) - a[i+1];
if((i+2) != n+1) {
if((a[i]+m-1) >= a[i+2]) {
siz -= (a[i]+m-1) - a[i+2];
}
}
}
}
if((i-1) != 0 && (i+1) != n+1) siz -= max(0,(a[i-1]+m-1)-a[i+1])*2;
// cout << siz << endl;
ans = max(ans,cnt-wt[i]+siz+m);
}
cout << ans << endl;
return 0;
}