#include <cstdio>
#include <cstdlib>
#define MAXN 1000000
using namespace std;
typedef unsigned long long llu;

llu budalica(llu a){
    if(a<0) return 0-a;
    return a;
}
llu min(llu a, llu b){
    if(a<b) return a;
    return b;
}
llu n,k,i,cou = 0;
llu gomila[MAXN];
llu pom[MAXN];
llu lm[MAXN];
int main(){
    freopen("zetoni.in","r",stdin);
    freopen("zetoni.out","w",stdout);
    scanf("%llu %llu",&n,&k);
    scanf("%llu",&gomila[0]);
    llu max = gomila[0];
    for(i=1;i<n;i++){
                     scanf("%llu",&gomila[i]);
                     if(gomila[i] != gomila[i-1]);{
                                  pom[cou] = gomila[i] - gomila[i-1];
                                  cou++;
                                  // k - max se dodaje na krajnji rezultat
                                  if(gomila[i]>max) max = gomila[i];
                                  }
}
llu c = 0;
if(pom[0] < 0) { lm[c] = gomila[0]; c++; }
int rez = budalica(pom[0]);

for(i=1;i<cou;i++){ 
                    if(((pom[i] < 0)&&(pom[i-1]<0)) || ((pom[i] > 0) && (pom[i-1] > 0))) rez += budalica(pom[i]);
                    if((pom[i] < 0) && (pom[i-1] > 0)){
                              lm[c] = gomila[i];
                              lm[c+1] = gomila[i+1];
                              c+=2;
                              }
}
// radi
//for(i=0;i<c; i++) printf("%d ",lm[i]);
if(lm[c-1]< lm[c-2]) rez+= (lm[c-2] - lm[c-1]); // krajnji mora do suseda
if(lm[0] < lm[1] ){
         rez+= lm[1] - lm[0]; // prvi mora do suseda
         for(i=2;i<c-1;i+=2) rez = rez + min(lm[i-1],lm[i+1]) - lm[i] + budalica(lm[i-1] - lm[i+1]);
         }
else for(i=1;i<c-1;i+=2) rez = rez + min(lm[i-1],lm[i+1]) - lm[i] + budalica(lm[i-1] - lm[i+1]);
printf("%llu",rez - max + k);
return 0;
}
