#include <bits/stdc++.h>

using namespace std ;

int mod ;

int Add(int x , int y)
{
	int z = x + y ;
	if(z >= mod)
		z -= mod ;
	return z ;
}

int Sub(int x , int y)
{
	int z = x - y ;
	if(z < 0)
		z += mod ;
	return z ;
}

int Mul(int x , int y)
{
	return (x * 1ll * y) % mod ;
}

int powlog(int base , int power)
{
	if(power == 0)
		return 1 ;
	int x = powlog(base , power / 2) ;
	x = Mul(x , x) ;
	if(power & 1)
		x = Mul(x , base) ;
	return x ;
}

int modinv(int x)
{
	return powlog(x , mod-2) ;
}

int Div(int x , int y)
{
	return Mul(x , modinv(y)) ;
}

const int MAX = 500 + 10 ;
const int INV = 505*504 / 2 ;

int arr[MAX] ;
int n ;

int dp[2][MAX*MAX-1][2] ;

int main()
{
	ios_base::sync_with_stdio(0) ;
	cin.tie(0) ;
	cin>>n>>mod ;
	dp[0][INV+0][0] = 1 ;
	for(int i = 1 ; i <= n ; ++i)
	{
		int cur = i&1 ;
		int prv = !cur ;
		int now = n-i+1 ;
		dp[cur][INV+0][0] = Mul(dp[prv][INV+0][0] , now) ;
		int x = 0 , y = 0 ;
		int sum1 = 0 , sum2 = 0 ;
		int a = n * (n-1) / 2 ;
		for(int j = -a ; j <= -a-1 + now-1 ; ++j)
		{
			sum2 = Add(sum2 , dp[prv][INV+j][1]) ;
			y = Add(y , Mul(j - (-a-1) , dp[prv][INV+j][1])) ;
		}
		for(int j = -a ; j <= a ; ++j)
		{
			sum2 = Add(sum2 , dp[prv][INV+j+now-1][1]) ;
			y = Add(y , sum2) , x = Sub(x , sum1) ;
			dp[cur][INV+j][1] = Add(x , y) ;
			if(j < 0 && abs(j) < now)
				dp[cur][INV+j][1] = Add(dp[cur][INV+j][1] , Mul(now - abs(j) , dp[prv][INV+0][0])) ;
			sum1 = Sub(sum1 , dp[prv][INV+j-now][1]) ;
			sum1 = Add(sum1 , dp[prv][INV+j][1]) ;
			x = Add(x , Mul(dp[prv][INV+j][1] , now)) ;
			sum2 = Sub(sum2 , dp[prv][INV+j][1]) ;
			y = Sub(y , Mul(dp[prv][INV+j][1] , now)) ;
		}
	}
	int ans = 0 ;
	for(int j = 1 ; j <= n * (n-1) / 2 ; ++j)
		ans = Add(ans , dp[n&1][INV+j][1]) ;
	return cout<<ans<<"\n" , 0 ;
}		