#include<iostream>#include<cstring>#include<algorithm>usingnamespace std;typedeflonglong ll;constint N =2000010;int primes[N], cnt;bool st[N];int n, p;intqmi(int a,int b,int c){int res =1;while(b){if(b &1) res =(ll)res * a % c;
a =(ll)a * a % c;
b >>=1;}return res;}voidinit(int n){for(int i =2; i <= n; i ++){if(!st[i]) primes[cnt ++]= i;for(int j =0; i * primes[j]<= n; j ++){
st[i * primes[j]]=true;if(i % primes[j]==0)break;}}}//n的阶乘当中含有多少个质因数pintget(int n,int p){int s =0;while(n){
s += n / p;
n /= p;}return s;}intC(int a,int b){int res =1;for(int i =0; i < cnt; i ++){int pm = primes[i];//质数pint s =get(a, pm)-get(b, pm)-get(a - b, pm);while(s --) res =(ll)res * pm % p;//边算边加//res = (ll)res * qmi(pm, s, p) % p;}return res;}intmain(){
cin >> n >> p;init(n *2);//先预处理质数//答案为卡特兰数C(2n,n) - C(2n, n - 1);
cout <<(C(2* n, n)-C(2* n, n -1)+ p)% p << endl;return0;}