#include #include using namespace boost::qvm; #define rep(i, n) for (int i = 0; i < (n); i++) using namespace std; using ll = long long; using P = pair; int MOD; mat modpowmat(mat a, ll n) { mat res = {1, 0, 0, 1}; while (n > 0) { if (n & 1) { res = res * a; A00(res) %= MOD; A01(res) %= MOD; A10(res) %= MOD; A11(res) %= MOD; } a *= a; A00(a) %= MOD; A01(a) %= MOD; A10(a) %= MOD; A11(a) %= MOD; n >>= 1; } return res; } int main() { ll n; cin >> n >> MOD; mat a0 = {1, 1, 1, 0}; vec res = modpowmat(a0, n - 2) * vec{1, 0}; A0(res) %= MOD; A1(res) %= MOD; cout << A0(res) << endl; }