#include<bits/stdc++.h>

#define ll long long
#define inf 0x3f3f3f3f
#define Inf 0x3f3f3f3f3f3f3f3f

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define per(i, a, b) for(int i = a; i >= (b); --i)

using namespace std;

int mod;

const int maxn = 505;

int n;
ll val[maxn], dp[2][maxn * maxn], sum[2][maxn * maxn], res;

const int K = maxn * maxn / 2;

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

	cin >> n >> mod;
	val[n] = 1;
	per(i, n-1, 2) val[i] = val[i+1] * (i+1) % mod;
	//per(i, n, 2) cout << val[i] << "\n";
	dp[0][K] = 1;
	sum[0][0] = 0;
	rep(i, 1, maxn * maxn) sum[0][i] = sum[0][i-1] + dp[0][i];
	rep(i, 2, n){
		rep(j, 0, maxn * maxn){
			if(j - i >= 0) dp[1][j] = sum[0][j] - sum[0][j-i];
			else dp[1][j] = sum[0][j];
			if(dp[1][j] < 0) dp[1][j] += mod;
			//cout << i << ' ' << j << ' ' << dp[i][j] << "\n";
		}
		rep(j, 0, maxn * maxn) dp[0][j] = dp[1][j];
		sum[0][0] = dp[0][0];
		rep(j, 1, maxn * maxn){
			sum[0][j] = sum[0][j-1] + dp[0][j];
			if(sum[0][j] >= mod) sum[0][j] -= mod;
		}
		rep(j, 0, maxn * maxn){
			if(j + i - 1 >= maxn * maxn) dp[1][j] = sum[0][maxn*maxn-1] - sum[0][j-1];
			else if(j - 1 >= 0) dp[1][j] = sum[0][j+i-1] - sum[0][j-1];
			else dp[1][j] = sum[0][j+i-1];
			if(dp[1][j] < 0) dp[1][j] += mod;
		}
		rep(j, 0, maxn * maxn) dp[0][j] = dp[1][j];
		sum[0][0] = dp[0][0];
		rep(j, 1, maxn * maxn){
			sum[0][j] = sum[0][j-1] + dp[0][j];
			if(sum[0][j] >= mod) sum[0][j] -= mod;
		}
		//rep(j, 0, maxn * maxn) if(dp[0][j]) cout << j-K << ' ' << dp[0][j] << "\n";
		rep(diff, 1, i + 1){
			res += val[i+1] * (i + 1 - diff) % mod * (sum[0][maxn*maxn-1] - sum[0][K+diff]) % mod;
			//cout << val[i+1] << ' ' << (sum[0][maxn*maxn-1] - sum[0][K+diff]) << "\n";
		}
		//cout << res << "\n";
		res %= mod;
		if(res < 0) res += mod;
	}
	cout << res << "\n";
}