#include <bits/stdc++.h>
using namespace std;
long long n,a[1000005],b[1000005],m,f[4000005],d1[4000005],d2[4000005],d3[4000005],f1[4000005];
set<long long> l;
map<long long,long long> p;
void galaxy1(long long x,long long l,long long r,long long v)
{
if(v==-1)
{
return;
}
f[x]=f1[x]=v;
d1[x]=v;
d2[x]=d3[x]=0;
return;
}
void galaxy2(long long x,long long l,long long r,long long v)
{
f[x]+=v;
f1[x]+=v;
d2[x]+=v;
return;
}
void galaxy3(long long x,long long l,long long r,long long v)
{
f[x]+=b[l]*v;
f1[x]+=b[r]*v;
d3[x]+=v;
return;
}
void pushdown(long long x,long long l,long long r)
{
long long lc=(x<<1),rc=(x<<1)|1,mid=(l+r)>>1;
if(d1[x]!=-1)
{
galaxy1(lc,l,mid,d1[x]),galaxy1(rc,mid+1,r,d1[x]),d1[x]=-1;
}
if(d2[x]!=0)
{
galaxy2(lc,l,mid,d2[x]),galaxy2(rc,mid+1,r,d2[x]),d2[x]=0;
}
if(d3[x]!=0)
{
galaxy3(lc,l,mid,d3[x]),galaxy3(rc,mid+1,r,d3[x]),d3[x]=0;
}
return;
}
void dijah1(long long x,long long l,long long r,long long ql,long long qr,long long v)
{
if(ql<=l&&r<=qr)
{
galaxy1(x,l,r,v);
return;
}
pushdown(x,l,r);
long long lc=(x<<1),rc=(x<<1)|1,mid=(l+r)>>1;
if(ql<=mid)
{
dijah1(lc,l,mid,ql,qr,v);
}
if(qr>mid)
{
dijah1(rc,mid+1,r,ql,qr,v);
}
f[x]=min(f[lc],f[rc]);
f1[x]=max(f1[lc],f1[rc]);
return;
}
void dijah2(long long x,long long l,long long r,long long ql,long long qr,long long v)
{
if(ql<=l&&r<=qr)
{
galaxy2(x,l,r,v);
return;
}
pushdown(x,l,r);
long long lc=(x<<1),rc=(x<<1)|1,mid=(l+r)>>1;
if(ql<=mid)
{
dijah2(lc,l,mid,ql,qr,v);
}
if(qr>mid)
{
dijah2(rc,mid+1,r,ql,qr,v);
}
f[x]=min(f[lc],f[rc]);
f1[x]=max(f1[lc],f1[rc]);
return;
}
void dijah3(long long x,long long l,long long r,long long ql,long long qr,long long v)
{
if(ql<=l&&r<=qr)
{
galaxy3(x,l,r,v);
return;
}
pushdown(x,l,r);
long long lc=(x<<1),rc=(x<<1)|1,mid=(l+r)>>1;
if(ql<=mid)
{
dijah3(lc,l,mid,ql,qr,v);
}
if(qr>mid)
{
dijah3(rc,mid+1,r,ql,qr,v);
}
f[x]=min(f[lc],f[rc]);
f1[x]=max(f1[lc],f1[rc]);
return;
}
long long gaia1(long long x,long long l,long long r,long long ql,long long qr)
{
if(ql<=l&&r<=qr)
{
return f[x];
}
pushdown(x,l,r);
long long lc=(x<<1),rc=(x<<1)|1,mid=(l+r)>>1,h=1e15+5;
if(ql<=mid)
{
h=gaia1(lc,l,mid,ql,qr);
}
if(qr>mid)
{
h=min(h,gaia1(rc,mid+1,r,ql,qr));
}
return h;
}
long long gaia2(long long x,long long l,long long r,long long ql,long long qr,long long v)
{
if(f[x]>=v)
{
return l;
}
if(l==r)
{
return -1;
}
long long lc=(x<<1),rc=(x<<1)|1,mid=(l+r)>>1,h;
pushdown(x,l,r);
if(qr<=mid)
{
return gaia2(lc,l,mid,ql,qr,v);
}
if(ql>mid)
{
return gaia2(rc,mid+1,r,ql,qr,v);
}
if(f[rc]<v)
{
return gaia2(rc,mid+1,r,ql,qr,v);
}
h=gaia2(lc,l,mid,ql,qr,v);
if(h==-1)
{
return gaia2(rc,mid+1,r,ql,qr,v);
}
return h;
}
int main()
{
long long x,y;
memset(d1,-1,sizeof(d1));
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]),l.insert(a[i]);
}
long long g=0;
set<long long>::iterator q=l.begin();
for(;q!=l.end();q++)
{
p[*q]=++g;
b[g]=*q;
}
for(int i=1;i<=n;i++)
{
a[i]=p[a[i]];
}
if(a[1]!=1)
{
dijah1(1,1,g,1,a[1]-1,m);
}
dijah3(1,1,g,a[1],g,1);
dijah2(1,1,g,a[1],g,-b[a[1]]);
for(int i=2;i<=n;i++)
{
y=gaia1(1,1,g,a[i-1],a[i-1]);
if(a[i-1]!=1)
{
x=gaia2(1,1,g,1,a[i-1]-1,y);
if(x!=-1)
{
dijah1(1,1,g,x,a[i-1]-1,y);
}
}
if(a[i]!=1)
{
dijah2(1,1,g,1,a[i]-1,m);
}
dijah3(1,1,g,a[i],g,1);
dijah2(1,1,g,a[i],g,-b[a[i]]);
}
printf("%lld",gaia1(1,1,g,1,g));
return 0;
}