#include #include #define rep(i,a,b) for(int i=a;i=a;i--) #define all(x) (x).begin(),(x).end() #define pb(x) push_back(x); templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b P; typedef vector vec; typedef vector mat; ll N,M; mat mul(mat &A,mat &B){ mat C(A.size(),vec(B[0].size())); rep(i,0,A.size()){ rep(k,0,B.size()){ rep(j,0,B[0].size()){ C[i][j]=(C[i][j]+A[i][k]*B[k][j])%M; } } } return C; } mat pow_mat(mat A,ll n){ mat B(A.size(),vec(A.size())); rep(i,0,A.size()){ B[i][i]=1; } while(n>0){ if(n&1) B=mul(B,A); A=mul(A,A); n>>=1; } return B; } int main(void){ ios::sync_with_stdio(false); cin.tie(nullptr); mat A(2,vec(2)); A[0][0]=1; A[0][1]=1; A[1][1]=0; A[1][0]=1; cin >> N >> M; mat B=pow_mat(A,N-2); cout << B[0][0] << endl; }