#include <iostream>
#define llint long long

using namespace std;

llint n, m, mod;
llint dp[5005][5005];
llint dpsum[5005][5005];
llint dp2[5005][5005];
llint num[5005][5005];

int main(void)
{
	cin >> n >> mod;
	if(n == 2){
		cout << 3 << endl;
		return 0;
	}
	m = (n+1)/2-1;
	
	dp[0][0] = 1;
	for(int i = 0; i <= n; i++){
		for(int j = 1; j <= n; j++){
			dp[i][j] = dp[i][j-1];
			if(i-j >= 0) dp[i][j] += dp[i-j][j], dp[i][j] %= mod;
		}
	}
	for(int j = 0; j <= n; j++){
		llint sum = 0;
		for(int i = 0; i <= n; i++){
			sum += dp[i][j];
			if(sum >= mod) sum -= mod;
			dpsum[i][j] = sum;
		}
	}
	
	for(int i = 0; i <= n; i++) dp2[0][i] = 1;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			llint ret = dp[i][j];
			if(i-m >= 0 && j-1 >= 0) ret += mod - dp2[i-m][j-1];
			if(i-2*m >= 0 && j-2 >= 0) ret += mod - dp2[i-2*m][j-2];
			if(i-3*m >= 0 && j-3 >= 0) ret += mod - dp2[i-3*m][j-3];
			if(i-(m+1) >= 0 && j-1 >= 0) ret += mod - dp[i-(m+1)][j-1];
			if(i-(m+2) >= 0 && j-1 >= 0) ret += mod - dpsum[i-(m+2)][j-1];
			dp2[i][j] = ret % mod;
		}
	}
	
	for(int i = 0; i <= n; i++){
		for(int j = 0; j <= n; j++){
			if(i+j > n) break;
			llint tmp = 0;
			for(int k = 0; k <= 3; k++){
				if(i-k*m < 0 || j-k < 0) break;
				if(n % 2 == 0) tmp += dp2[i-k*m][j-k] * (k+1);
				else tmp += dp2[i-k*m][j-k];
			}
			num[i][j] = tmp % mod;
		}
	}
	for(int j = 0; j <= n; j++){
		llint sum = 0;
		for(int i = 0; i <= n; i++){
			if(i+j > n) break;
			sum += num[i][j];
			if(sum >= mod) sum -= mod;
			num[i][j] = sum;
		}
	}
	
	llint ans = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= i; j++){
			ans += dp[i-j][m] * num[j-1][n-i] % mod;
		}
	}
	cout << ans % mod << endl;
	
	return 0;
}