#include #define rep(i,n) for(int i = 0; i < (n); i++) using namespace std; using ll = long long; using P = pair; int m, mod; vector matmul(vector &dp, vector> &mt){ vector ret(m,0); rep(i,m) rep(j,m){ ret[i] += mt[i][j]*dp[j]; ret[i] %= mod; } return ret; } vector> update(vector> &mt){ vector> ret(m,vector(m,0)); rep(i,m) rep(j,m) rep(k,m) { ret[i][j] += mt[i][k]*mt[k][j]; ret[i][j] %= mod; } return ret; } void matpow(vector &dp, vector> &mt, int k){ m = dp.size(); while(k){ if(k&1) dp = matmul(dp,mt); mt = update(mt); k /= 2; } } int main(){ int n; cin >> n >> mod; vector dp(2); vector> mt(2, vector(2)); dp[0] = 1; dp[1] = 0; mt[0][0] = mt[0][1] = mt[1][0] = 1; mt[1][1] = 0; matpow(dp, mt, n-1); cout << dp[1] << endl; }