#include using namespace std; #define rep(i,n) for (int i=0; i> mat_mul_mod(vector> a, vector> b,i64 mod){ vector> res(2,vector(2,0)); res.at(0).at(0) = ((a.at(0).at(0)*b.at(0).at(0))%mod + (a.at(0).at(1)*b.at(1).at(0))%mod)%mod; res.at(0).at(1) = ((a.at(0).at(0)*b.at(0).at(1))%mod + (a.at(0).at(1)*b.at(1).at(1))%mod)%mod; res.at(1).at(0) = ((a.at(1).at(0)*b.at(0).at(0))%mod + (a.at(1).at(1)*b.at(1).at(0))%mod)%mod; res.at(1).at(1) = ((a.at(1).at(0)*b.at(0).at(1))%mod + (a.at(1).at(1)*b.at(1).at(1))%mod)%mod; return res; } int main(){ i64 N,M; cin >> N >> M; i64 key=N-2; vector> mat_key = { {0,1}, {1,1} }; vector> mat_res = { {1,0}, {0,1} }; while (key>0){ if (key&1) mat_res = mat_mul_mod(mat_key, mat_res, M); key = key >> 1; mat_key = mat_mul_mod(mat_key,mat_key, M); } cout << mat_res.at(1).at(1) << endl; }