#include using namespace std; #define rep(i, n) for (ll i = 0; i < n; i++) #define all(x) (x).begin(),(x).end() const int mod = 1000000007; const long long INF = 1LL << 60; using ll = long long; #define v2d(type,H,W,name,value) vector> name(H,vector(W,value)); vector> mul(vector> a,vector> b,ll M){ v2d(ll,a.size(),b[0].size(),c,0); rep(i,a.size()){ rep(k,b.size()){ rep(j,b[0].size()){ c[i][j]=(c[i][j]+a[i][k]*b[k][j])%M; } } } return c; } //a^b mod M vector> power(vector> a,ll b,ll M){ ll bb=b; auto a_pow=a; v2d(ll,a.size(),a.size(),res,0); rep(i,a.size()){ res[i][i]=1; } while(bb>0){ if(bb&1) res=mul(res,a_pow,M); a_pow=mul(a_pow,a_pow,M); bb>>=1; } return res; } int main() { ll N,M; cin >> N >> M; v2d(ll,2,2,a,0); a[0][0]=1; a[0][1]=1; a[1][0]=1; a[1][1]=0; a=power(a,N,M); cout << a[1][1] << endl; }