#include<bits/stdc++.h>
#define maxn 100005
using namespace std;

long long n,m;
long long a[maxn];
long long b[maxn];
long long sqr[4*maxn],sum[4*maxn],lsum[4*maxn];
void build(int v,int l,int r)
{
    lsum[v]=0LL;

    if(l==r)
    {
        sqr[v]=b[l]*b[l];
        sum[v]=b[l];
        return;
    }

    int mid=(l+r)/2;
    build(2*v,l,mid);
    build(2*v+1,mid+1,r);
    sqr[v]=sqr[2*v]+sqr[2*v+1];
    sum[v]=sum[2*v]+sum[2*v+1];
    return;
}
void update(int v,int l,int r,int lt,int rt,long long t)
{
    if(l>rt || r<lt)return;
    if(lsum[v]!=0LL)
    {
        sqr[v]+=2*lsum[v]*sum[v];
        sqr[v]+=(r-l+1)*lsum[v]*lsum[v];
        sum[v]+=(r-l+1)*lsum[v];
        if(l!=r)
        {
            lsum[2*v]+=lsum[v];
            lsum[2*v+1]+=lsum[v];
        }
        lsum[v]=0LL;
    }
    if(lt<=l && r<=rt)
    {
        sqr[v]+=2*t*sum[v];
        sqr[v]+=(r-l+1)*t*t;
        sum[v]+=(r-l+1)*t;
        if(l!=r)
        {
            lsum[2*v]+=t;
            lsum[2*v+1]+=t;
        }
        return;
    }
    int mid=(l+r)/2;
    update(2*v,l,mid,lt,rt,t);
    update(2*v+1,mid+1,r,lt,rt,t);
    sqr[v]=sqr[2*v]+sqr[2*v+1];
    sum[v]=sum[2*v]+sum[2*v+1];
    return;
}
long long sqrsum(int v,int l,int r,int lt,int rt)
{
    if(l>rt || r<lt)return 0LL;
    if(lsum[v]!=0LL)
    {
        sqr[v]+=2*lsum[v]*sum[v];
        sqr[v]+=(r-l+1)*lsum[v]*lsum[v];
        sum[v]+=(r-l+1)*lsum[v];
        if(l!=r)
        {
            lsum[2*v]+=lsum[v];
            lsum[2*v+1]+=lsum[v];
        }
        lsum[v]=0LL;
    }
    if(lt<=l && r<=rt)
    {
        return sqr[v];
    }
    int mid=(l+r)/2;
    long long sum1=sqrsum(2*v,l,mid,lt,rt);
    long long sum2=sqrsum(2*v+1,mid+1,r,lt,rt);
    return sum1+sum2;
}
long long uradi3()
{
    for(int i=0;i<m;i++)b[i]=0LL;
    for(int i=0;i<n;i++)
    {
        if(a[i]!=0)
        {
        	b[0]++;
        	b[a[i]]--;
        }
    }
    for(int i=1;i<m;i++)b[i]+=b[i-1];
    for(int i=0;i<m;i++)b[i]-=(n-b[i]);

    //for(int i=0;i<n;i++)cout<<b[i]<<" ";

    build(1,0,m-1);
    long long sol=sqrsum(1,0,m-1,0,m-1);
    //cout<<0<<" "<<sol<<endl;
    for(int i=0;i<n;i++)
    {
        update(1,0,m-1,0,a[i]-1,-2);
        update(1,0,m-1,a[i],m-1,2);

        long long tre=sqrsum(1,0,m-1,0,m-1);
        if(tre>sol)sol=tre;
        //cout<<i<<" "<<tre<<endl;
    }

    return (m*n*n-sol)/4;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    cin>>n>>m;
    for(int i=0;i<n;i++)cin>>a[i];
    sort(a,a+n);
    
    cout<<uradi3()<<endl;
}