#include <bits/stdc++.h>
using namespace std;
template<class t> inline t read(t &x){
	char c=getchar();bool f=0;x=0;
	while(!isdigit(c)) f|=c=='-',c=getchar();
	while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
	if(f) x=-x;return x;
}
template<class t> inline void write(t x){
	if(x<0) putchar('-'),write(-x);
	else{if(x>9)write(x/10);putchar('0'+x%10);}
}

const int C=130000,N=505;
int n,mod,f[2][2*C+5],sum[2][2*C+5],ans[N];

signed main(){
	read(n);read(mod);
	f[0][C]=1;
	for(int i=C;i<=C*2;i++) sum[0][i]=1;
	for(int i=1,o=1;i<=n;i++,o=!o){
		memset(f[o],0,sizeof f[o]);
		memset(sum[o],0,sizeof sum[o]);
		for(int T=i*(i-1)/2,j=C-T;j<=C+T;j++)
			f[o][j]=(1ll*f[o][j-1]-(sum[!o][j-1]-sum[!o][j-1-i])+(sum[!o][j-1+i]-sum[!o][j-1]))%mod;
		for(int j=C-i*(i-1)/2;j<=C+(i+2)*(i+1)/2;j++) sum[o][j]=(sum[o][j-1]+f[o][j])%mod;
		for(int j=1;j<i;j++) ans[i]=(ans[i]+1ll*(sum[!o][(i+1)*i/2+C]-sum[!o][j+C])*(i-j))%mod;
	}
	for(int i=2;i<=n;i++) ans[i]=(ans[i]+1ll*i*ans[i-1])%mod;
	write((ans[n]+mod)%mod);
}