#include <bits/stdc++.h>
using namespace std;
const int N=505;
int a,n,f[2][N*N],s[N*N],X,Y=1,g[N],P,c[N][N],jc[N];
int M(int x){if (x>=P) x-=P;return x;}
int main(){
	scanf("%d%d",&n,&P);
	f[0][0]=c[0][0]=jc[0]=1;
	for (int i=1;i<=n;i++){
		c[i][0]=1;jc[i]=1ll*i*jc[i-1]%P;
		for (int j=1;j<=i;j++)
			c[i][j]=M(c[i-1][j-1]+c[i-1][j]);
	}
	for (int i=2,u=0,v,w;i<=n;i++){
		f[Y][0]=s[0]=1;
		for (int j=1,k=0;j<=u;j++){
			f[Y][j]=M(f[Y][j-1]+f[X][j]);
			if (j==k+i-1) f[Y][j]=M(f[Y][j]+P-f[X][k]),k++;
			s[j]=M(s[j-1]+f[Y][j]);
		}
		v=1;w=i-1;
		for (int j=2,k=0;j<=u;j++){
			g[i]=M(g[i]+1ll*w*f[Y][j]%P);
			w=M(M(w+P-v)+1ll*(i-1)*s[j-1]%P);
			v=M(v+s[j-1]);
			if (j==k+i) v=M(v+P-s[k]),k++;
		}
		u+=i-1;X^=1;Y^=1;
	}
	for (int i=0;i<n;i++)
		a=M(a+1ll*c[n][i]*g[n-i]%P*jc[i]%P);
	printf("%d\n",a);return 0;
}
