#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int N=10001; typedef long long LL; int su[N],num[N]; int n,m,sui; void mul(LL &res,int k) { for(int i=0;i0) { k/=su[i]; num[i]--; } } if(k!=1) { int x,y,temp; temp=ext_gcd(k,m,x,y); x=(x%m+m)%m; res=(res*x)%m; } } int main() { int i,j,k,t; while(scanf("%d%d",&n,&m)&&(n+m)) { sui=0,t=m; for(i=2;i*i<=t;i++) if(t%i==0) { su[sui++]=i; while(t%i==0) t/=i; } if(t>1) su[sui++]=t; memset(num,0,sizeof(num)); LL res=1,sum=1,l; for(i=2;i<=n;i++) { mul(res,4*i-2); chu(res,i+1); l=res; for(j=0;j