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

const int N = 505;
const int b = 130000;
int f[2*b+5], s[2*b+5], g[2*b+5], ans[N];

int n, mod;

void solve(){
    for (int i = b; i <= 2 * b + 4; ++i) s[i]=1;

    for (int i = 1; i <= n; ++i) {
            //cout<<"i="<< i<<'\n';
        int tmp = i * (i - 1) / 2;
        //for(int i=-3; i<=3; ++i) cout<<"i,s="<<i<<' '<<s[i+b]<<'\n';
        for (int k = - tmp + b; k <= tmp + b; ++k) {
            f[k] = (0ll + f[k - 1] - (s[k - 1] - s[k - i - 1]) + s[k + i - 1] - s[k - 1] + 3ll * mod) % mod;
            //cout<<"k,f="<<k-b<<' '<<f[k]<<'\n';

        }

        for (int k = tmp + b; k >= - tmp + b; --k) {
            g[k] = (g[k + 1] + f[k]) % mod;
            //cout<<"k,g[k]="<<k-b<<' '<<g[k]<<'\n';
        }

        for(int j = 1; j <= i; ++j) {
            ans[i + 1] = (ans[i + 1] + (1ll * (i + 1 - j) * g[j + 1 + b]) % mod) % mod;
        }

        memset(s, 0, sizeof(s));

        tmp = (i + 1) * i / 2;
        for (int k = - tmp - i - 1 + b; k <= tmp + b+ i + 1; ++k) {
            //cout<<"ki, f="<<k<<' '<<f[k]<<'\n';
            s[k] = (s[k - 1] + f[k]) % mod;
        }
    }

    for (int i = 1; i <= n; ++i) ans[i] = (ans[i] + (1ll * i * ans[i-1]) % mod) % mod;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n >> mod;

    solve();
    cout << ans[n];
}
