#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll a[100010],dp[10010],dp2[10010],rez;
int n,m,br,ad[10010],cnnt[10010];
pair<long long,int>niz[10010];
ll score(){
   ll ret=0;
   for(int i=1;i<=m;i++){
      if(cnnt[i]==0)break;
      ret+=(ll)((ll)n-cnnt[i])*(ll)cnnt[i];
   }
   return ret;
}
int main(){
    scanf("%d %d",&n,&m);

    for(int i=1;i<=n;i++)
        scanf("%lld",&a[i]);

    sort(a+1,a+n+1);

    a[0]=-1;
    int cnt=1;
    a[n+1]=-1;
    for(int i=2;i<=n+1;i++){
       if(a[i]!=a[i-1]){
          niz[++br]={a[i-1],cnt};
          cnt=1;
       }
       else cnt++;
    }

    for(int i=1;i<=br;i++)ad[niz[i].first+1]-=niz[i].second;

    int curr=n;
    for(int i=1;i<=m;i++){
        curr+=ad[i];
        cnnt[i]=curr;
    }

    dp[br]=score();

    for(int i=br;i>=1;i--){
        for(int j=niz[i].first;j>=1;j--)cnnt[j]-=niz[i].second;
        dp[i-1]=score();

//        printf("%lld\n",dp[i]);
    }



    /// NOV !!!!!!!!!!!!!!


   br=0;
   for(int i=1;i<=n;i++)
    a[i]=m-a[i];

   sort(a+1,a+n+1);

    a[0]=-1;
    cnt=1;
    a[n+1]=-1;
    for(int i=2;i<=n+1;i++){
       if(a[i]!=a[i-1]){
          niz[++br]={a[i-1],cnt};
          cnt=1;
       }
       else cnt++;
    }

    memset(ad,0,sizeof(ad));
    memset(cnnt,0,sizeof(cnnt));

    for(int i=1;i<=br;i++){
        ad[niz[i].first+1]-=niz[i].second;
    }

    curr=n;
    for(int i=1;i<=m;i++){
        curr+=ad[i];
        cnnt[i]=curr;
    }

    dp2[br]=score();

    for(int i=br;i>=1;i--){
        for(int j=niz[i].first;j>=1;j--)cnnt[j]-=niz[i].second;
        dp2[i-1]=score();

//        printf("%lld\n",dp2[i]);
    }

    int point=br;
    rez=1e18;
    for(int i=0;i<=br;i++){

       rez=min(rez,(ll)dp[i]+dp2[point]);
       ///printf("%lld %lld\n",dp[i],dp2[point]);

       point--;
    }

    printf("%lld\n",rez);

return 0;
}