#include "bits/stdc++.h"
using namespace std;
const int N = 1 << 20;
int n , mod;
int add(int a , int b){
int res = a + b;
if(res >= mod){
return res - mod;
}
return res;
}
int mult(int a , int b){
long long res = a;
res *= b;
if(res >= mod){
return res % mod;
}
return res;
}
int power(int a , int b){
int res = 1;
while(b){
if(b & 1){
res = mult(res , a);
}
a = mult(a , a);
b >>= 1;
}
return res;
}
int fact[N];
int ifact[N];
void pre(){
fact[0] = 1;
for(int i = 1 ; i <= n ; ++i){
fact[i] = mult(fact[i - 1] , i);
}
ifact[n] = power(fact[n] , mod - 2);
for(int i = n - 1 ; i >= 0 ; --i){
ifact[i] = mult(ifact[i + 1] , i + 1);
}
}
int c(int n , int r){
return mult(fact[n] , mult(ifact[r] , ifact[n - r]));
}
int solve(int n){
if(n == 1){
return 1;
}
int res = solve(n >> 1);
res = mult(res , res);
res = mult(res , c(n - 1 , n >> 1));
return res;
}
int main(){
cin >> n >> mod;
n += !(n & 1);
pre();
cout << solve(n);
}
I2luY2x1ZGUgImJpdHMvc3RkYysrLmgiCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBOID0gMSA8PCAyMDsKaW50IG4gLCBtb2Q7CmludCBhZGQoaW50IGEgLCBpbnQgYil7CiAgICBpbnQgcmVzID0gYSArIGI7CiAgICBpZihyZXMgPj0gbW9kKXsKICAgICAgICByZXR1cm4gcmVzIC0gbW9kOwogICAgfQogICAgcmV0dXJuIHJlczsKfQppbnQgbXVsdChpbnQgYSAsIGludCBiKXsKICAgIGxvbmcgbG9uZyByZXMgPSBhOwogICAgcmVzICo9IGI7CiAgICBpZihyZXMgPj0gbW9kKXsKICAgICAgICByZXR1cm4gcmVzICUgbW9kOwogICAgfQogICAgcmV0dXJuIHJlczsKfQppbnQgcG93ZXIoaW50IGEgLCBpbnQgYil7CiAgICBpbnQgcmVzID0gMTsKICAgIHdoaWxlKGIpewogICAgICAgIGlmKGIgJiAxKXsKICAgICAgICAgICAgcmVzID0gbXVsdChyZXMgLCBhKTsKICAgICAgICB9CiAgICAgICAgYSA9IG11bHQoYSAsIGEpOwogICAgICAgIGIgPj49IDE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CmludCBmYWN0W05dOwppbnQgaWZhY3RbTl07CnZvaWQgcHJlKCl7CiAgICBmYWN0WzBdID0gMTsKICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyArK2kpewogICAgICAgIGZhY3RbaV0gPSBtdWx0KGZhY3RbaSAtIDFdICwgaSk7CiAgICB9CiAgICBpZmFjdFtuXSA9IHBvd2VyKGZhY3Rbbl0gLCBtb2QgLSAyKTsKICAgIGZvcihpbnQgaSA9IG4gLSAxIDsgaSA+PSAwIDsgLS1pKXsKICAgICAgICBpZmFjdFtpXSA9IG11bHQoaWZhY3RbaSArIDFdICwgaSArIDEpOwogICAgfQp9CmludCBjKGludCBuICwgaW50IHIpewogICAgcmV0dXJuIG11bHQoZmFjdFtuXSAsIG11bHQoaWZhY3Rbcl0gLCBpZmFjdFtuIC0gcl0pKTsKfQppbnQgc29sdmUoaW50IG4pewogICAgaWYobiA9PSAxKXsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGludCByZXMgPSBzb2x2ZShuID4+IDEpOwogICAgcmVzID0gbXVsdChyZXMgLCByZXMpOwogICAgcmVzID0gbXVsdChyZXMgLCBjKG4gLSAxICwgbiA+PiAxKSk7CiAgICByZXR1cm4gcmVzOwp9CmludCBtYWluKCl7CiAgICBjaW4gPj4gbiA+PiBtb2Q7CiAgICBuICs9ICEobiAmIDEpOwogICAgcHJlKCk7CiAgICBjb3V0IDw8IHNvbHZlKG4pOwp9