#include <bits/stdc++.h>
using namespace std;
//#define int long long
const int maxn = 1e7+5;
const int mod = 1e9 + 7;
const int oo = 2e9+5;
typedef pair<int, int> ii;
typedef pair<int, pair<int, int>> iii;
#define fi first
#define se second
#define read(_a, n) for(int i = 1; i <= n; i++) cin >> _a[i]
#define For(i, _a, _b) for(int i = _a; i <= _b; i++)
#define bit(x, i) ((x >> (i)) & 1)
#define bat(x, i) (x (1 << (i)))
int f[maxn], m, n;
long long a[100005];
long long res;
long long cal(int x)
{
long long res = 0;
if(x&1) res = ((x+1)/2) % m * x;
else res = (x/2)%m * (x+1);
res %= m; res = (res*x)%m;
res = (res + f[x+1] - 1)%m;
return res;
}
int32_t main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
if(fopen("main.inp", "r"))
{
freopen("main.inp", "r", stdin);
// freopen("main.out", "w", stdout);
}
cin >>n >> m;
f[1] = 1;
For(i, 2, m)
{
long long p = 1ll*f[i-1]*i % m;
f[i] = p;
}
For(i, 1, n) cin >> a[i], res += cal(a[i]), res%= m;
cout << res;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vI2RlZmluZSBpbnQgbG9uZyBsb25nCmNvbnN0IGludCBtYXhuID0gMWU3KzU7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3Owpjb25zdCBpbnQgb28gPSAyZTkrNTsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsKdHlwZWRlZiBwYWlyPGludCwgcGFpcjxpbnQsIGludD4+IGlpaTsKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHJlYWQoX2EsIG4pIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gX2FbaV0KI2RlZmluZSBGb3IoaSwgX2EsIF9iKSBmb3IoaW50IGkgPSBfYTsgaSA8PSBfYjsgaSsrKQojZGVmaW5lIGJpdCh4LCBpKSAoKHggPj4gKGkpKSAmIDEpCiNkZWZpbmUgYmF0KHgsIGkpICh4ICAoMSA8PCAoaSkpKQoKaW50IGZbbWF4bl0sIG0sIG47CmxvbmcgbG9uZyBhWzEwMDAwNV07CmxvbmcgbG9uZyByZXM7Cgpsb25nIGxvbmcgY2FsKGludCB4KQp7CiAgICBsb25nIGxvbmcgcmVzID0gMDsKICAgIGlmKHgmMSkgcmVzID0gKCh4KzEpLzIpICUgbSAqIHg7CiAgICBlbHNlIHJlcyA9ICh4LzIpJW0gKiAoeCsxKTsKICAgIHJlcyAlPSBtOyByZXMgPSAocmVzKngpJW07CiAgICByZXMgPSAocmVzICsgZlt4KzFdIC0gMSklbTsKICAgIHJldHVybiByZXM7Cn0KCmludDMyX3QgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmKGZvcGVuKCJtYWluLmlucCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigibWFpbi5pbnAiLCAiciIsIHN0ZGluKTsKLy8gICAgICAgIGZyZW9wZW4oIm1haW4ub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+biA+PiBtOwogICAgZlsxXSA9IDE7CiAgICBGb3IoaSwgMiwgbSkKICAgIHsKICAgICAgICBsb25nIGxvbmcgcCA9IDFsbCpmW2ktMV0qaSAlIG07CiAgICAgICAgZltpXSA9IHA7CiAgICB9CiAgICBGb3IoaSwgMSwgbikgY2luID4+IGFbaV0sIHJlcyArPSBjYWwoYVtpXSksIHJlcyU9IG07CiAgICBjb3V0IDw8IHJlczsKfQo=