#include<bits/stdc++.h>
#define rint register int
using namespace std;
int n,inv[2][250005]={1},sum[2][250005],psm[2][250005],vsm[2][250005],mod;
long long A[505]={1},res=0;
int main()
{
	scanf("%d%d",&n,&mod);
	for(rint i=1;i<=n;i++)A[i]=A[i-1]*(n-i+1)%mod;
	for(rint i=1;i<=n;i++)
	{
		inv[i&1][0]=1;
		for(register long long j=1;j<=n*(n-1)/2;j++)
		{
			rint C=i%2,R=1-i%2;
			if(j>=i)inv[C][j]=(1LL*inv[C][j-1]-inv[R][j-i]+inv[R][j] + mod)%mod;
			else inv[C][j]=(inv[C][j-1]+inv[R][j])%mod;
			sum[C][j]=(sum[C][j-1]+inv[C][j-1])%mod;
			psm[C][j]=(psm[C][j-1]+sum[C][j])%mod;
			vsm[C][j]=(vsm[C][j-1]+sum[C][j]*j)%mod;
			res=(res+ A[n-i]*inv[R][j]%mod *(((i-j)*(psm[R][j-1]-psm[R][max(0ll,j-i)])+(vsm[R][j-1]-vsm[R][max(0ll,j-i)]))%mod) )%mod;
			//printf("%5d%3d%4d%4d%3d",inv[C][j],sum[C][j],psm[C][j],vsm[C][j],res);
		}
		//puts("");
	}
	printf("%lld",(res+mod)%mod);
	return 0;
}