#include<stdio.h>
#include<algorithm>
#define MAX 10000009
using namespace std;
typedef long long ll;
int main()
{
ll n,mod,fact,result,sum,iter;
//scanf("%lld",&test);
//while(test--)
//{
scanf("%lld%lld",&n,&mod);
ll arr[n];
fact=1;
sum=0;
iter=0;
result=0;
for(ll i=0;i<n;i++)
{
scanf("%lld",&arr[i]);
arr[i]%=mod;
}
sort(arr,arr+n);
for(ll i=1;i<=arr[n-1];i++)
{
if(i>=mod)
break;
fact=fact*i;
fact%=mod;
sum=sum+(i*fact);
sum%=mod;
if(i==arr[iter])
{
result+=sum;
result%=mod;
iter++;
}
}
for(ll i=iter;i<n;i++) //+1 or +0
{
result+=sum;
result%=mod;
}
for(ll i=0;i<n;i++)
{
if(arr[i]%2==0)
{
sum=arr[i]/2;
sum*=arr[i];
sum%=mod;
sum*=(arr[i]+1);
sum%=mod;
}
else
{
sum=(arr[i]+1)/2;
sum*=arr[i];
sum%=mod;
sum*=(arr[i]);
sum%=mod;
}
result+=sum;
result%=mod;
}
printf("%lld\n",result);
//}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8YWxnb3JpdGhtPgojZGVmaW5lIE1BWCAxMDAwMDAwOQp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKaW50IG1haW4oKQp7CglsbCBuLG1vZCxmYWN0LHJlc3VsdCxzdW0saXRlcjsKCS8vc2NhbmYoIiVsbGQiLCZ0ZXN0KTsKCS8vd2hpbGUodGVzdC0tKQoJLy97CgkJc2NhbmYoIiVsbGQlbGxkIiwmbiwmbW9kKTsKCQlsbCBhcnJbbl07CgkJZmFjdD0xOwoJCXN1bT0wOwoJCWl0ZXI9MDsKCQlyZXN1bHQ9MDsKCQlmb3IobGwgaT0wO2k8bjtpKyspCgkJewoJCQlzY2FuZigiJWxsZCIsJmFycltpXSk7CgkJCWFycltpXSU9bW9kOwoJCX0KCQlzb3J0KGFycixhcnIrbik7CgkJZm9yKGxsIGk9MTtpPD1hcnJbbi0xXTtpKyspCgkJewoJCQlpZihpPj1tb2QpCgkJCQlicmVhazsKCQkJCgkJCWZhY3Q9ZmFjdCppOwoJCQlmYWN0JT1tb2Q7CgkJCQoJCQlzdW09c3VtKyhpKmZhY3QpOwoJCQlzdW0lPW1vZDsKCQkJCgkJCWlmKGk9PWFycltpdGVyXSkKCQkJewoJCQkJcmVzdWx0Kz1zdW07CgkJCQlyZXN1bHQlPW1vZDsKCQkJCWl0ZXIrKzsKCQkJfQoJCX0KCQlmb3IobGwgaT1pdGVyO2k8bjtpKyspCQkJLy8rMSBvciArMAoJCXsKCQkJcmVzdWx0Kz1zdW07CgkJCXJlc3VsdCU9bW9kOwoJCX0KCQkKCQlmb3IobGwgaT0wO2k8bjtpKyspCgkJewoJCQlpZihhcnJbaV0lMj09MCkKCQkJewoJCQkJc3VtPWFycltpXS8yOwoJCQkJc3VtKj1hcnJbaV07CgkJCQlzdW0lPW1vZDsKCQkJCXN1bSo9KGFycltpXSsxKTsKCQkJCXN1bSU9bW9kOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJc3VtPShhcnJbaV0rMSkvMjsKCQkJCXN1bSo9YXJyW2ldOwoJCQkJc3VtJT1tb2Q7CgkJCQlzdW0qPShhcnJbaV0pOwoJCQkJc3VtJT1tb2Q7CgkJCX0KCQkJcmVzdWx0Kz1zdW07CgkJCXJlc3VsdCU9bW9kOwoJCX0KCQkKCQkKCQlwcmludGYoIiVsbGRcbiIscmVzdWx0KTsKCS8vfQoJcmV0dXJuIDA7Cn0=