#include<bits/stdc++.h>
#define mem(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;
const int N=515,O=125000;
ll n,p,lp,f[N*N],g[N*N],cf[N*N],cg[N*N],ans;
int read()
{
	int res=0,fl=0; char a=getchar();
	while(a<'0'||a>'9') fl|=a=='-',a=getchar();
	while(a>='0'&&a<='9') res=res*10+a-'0',a=getchar();
	return fl? -res:res;
}
void ch(ll &x) {x-=p,x+=x>>63&p;}
int main()
{
	int i,j,li,lm;
	cin>>n>>p,g[O]=1;
	for(i=1;i<n;i++)
	{
		lm=i*(i-1)/2,li=i*(i+1)/2;
		for(j=O-lm;j<=O+lm;j++)
			ch(cg[j-i]+=g[j]),ch(cg[j+1]+=(2*p-2*g[j])%p),ch(cg[j+i+2]+=g[j]),
			ch(cf[j-i+1]+=f[j]),ch(cf[j+1]+=(2*p-2*f[j])%p),ch(cf[j+i+1]+=f[j]);
		for(j=O-li;j<=O+li;j++) ch(cf[j]+=cf[j-1]),ch(cg[j]+=cg[j-1]);
		for(j=O-lm;j<=O+lm;j++) ch(cf[j-i]+=g[j]),ch(cf[j]+=p-g[j]);
		for(j=O-li;j<=O+li;j++) ch(cf[j]+=cf[j-1]),ch(cg[j]+=cg[j-1]),f[j]=cf[j],g[j]=cg[j];
		mem(cf),mem(cg);
		for(lp=1,j=n;j>i+1;j--) lp=lp*j%p;
		for(j=O+1;j<=O+li;j++) ans=(ans+lp*f[j])%p;
	}
	cout<<ans;
	return 0;
}