#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+5;
int mod=1e9+7;
#define pb push_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
typedef long long ll;
typedef double db;
typedef vector<int> vi;
typedef pair<int,int> pii;
ll qpow(ll a,ll b){ll ans=1;a%=mod;assert(b>=0);for(;b;b>>=1){if(b&1)ans=ans*a%mod;a=a*a%mod;}return ans;}
ll gcd(ll a,ll b){return b>0?gcd(b,a%b):a;}
int n,m,T;
int a[maxn];
int dp[5005][5005];
void update(int &x, int y) {
	x += y;
	if (x >= mod) x -= mod;
}
int main(){
	cin>>n>>mod;
	m=(n-1)/2;
	dp[0][0]=1;
	for(int i=1;i<=m;i++){
		for(int j=0;j<=n;j++){
			for(int k=0;k*i<=j;k++){
				update(dp[i][j],1ll*dp[i-1][j-k*i]*(k+1)%mod);
			}
		}
	}
	int ans=0;
	if(n&1){
		for(int i=1;i<=n;i++){
			for(int j=0;j*(m+1)<=n-i;j++){
				update(ans,dp[m][n-i-j*(m+1)]);
			}
		}
	}else{
		for(int i=1;i<=n;i++){
			for(int j=0;j*(m+1)<=n-i;j++){
				update(ans,1ll*dp[m][n-i-j*(m+1)]*(j+1)%mod);
			}
		}
	}
	cout<<ans<<endl;
	
	return 0;
}
/*

*/

