#include using namespace std; using i32 = int; using i64 = long long; vector> mul(vector>& as, vector>& bs, i32 m) { assert(as[0].size() == bs.size()); vector res(as.size(), vector(bs[0].size(), 0LL)); for (size_t i = 0 ; i < as.size() ; i++) { for (size_t j = 0 ; j < bs[0].size() ; j++) { for (size_t k = 0 ; k < as[0].size() ; k++) { res[i][j] = (res[i][j] + as[i][k] * bs[k][j]) % m; } } } return res; } int main() { i32 n; cin >> n; i32 m; cin >> m; n--; const i32 lg = 32; vector dob(lg, vector(2, vector(2, 0LL))); dob[0] = { { 1LL, 1LL }, { 1LL, 0LL } }; for (i32 i = 0 ; i + 1 < lg ; i++) { dob[i + 1] = mul(dob[i], dob[i], m); } vector> ans = { { 1LL, 0LL }, { 0LL, 1LL } }; for (i32 i = 0 ; i < lg ; i++) { if (n & (1 << i)) { ans = mul(ans, dob[i], m); } } cout << ans[1][0] << endl; }