#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int mod;
inline int Mod(int x) { return x<0 ? x+mod : (x>=mod ? x-mod : x); }
inline void adm(int &x,int y) { x=Mod(x+y); }
const int N=500010;
int n;
int f[N];
int g[N];
int pw[N];
void solve(int n)
{
if (n<=1) return;
solve(n>>1);
fill(g,g+n+1,0);
int lim=sqrt(2*n);
for (int i=lim;i;i--)
{
for (int j=n;j>=i;j--) g[j]=g[j-i];
for (int j=1;j<i;j++) g[j]=0;
for (int j=0;(j+2)*i+j<=n;j++) adm(g[(j+2)*i+j],f[j]);
for (int j=i;j<=n;j++) adm(g[j],g[j-i]);
}
for (int i=(n>>1)+1;i<=n;i++) adm(f[i],mod-g[i]);
}
int main()
{
cin >> n >> mod;
int lim=sqrt(2*n); f[0]=1;
for (int i=lim;i;i--)
{
for (int j=n;j>i;j--) f[j]=f[j-i];
for (int j=1;j<=i;j++) f[j]=0;
for (int j=i;j<=n;j++) adm(f[j],f[j-i]);
}
solve(n);
pw[0]=1;
for (int i=1;i<=n;i++) pw[i]=(ll)pw[i-1]*2%mod;
int ans=pw[n];
for (int i=0;i<n;i++) adm(ans,mod-(ll)f[i]*pw[n-i-1]%mod);
cout << ans << "\n";
return 0;
}