#include using namespace std; vector> mul(vector> a, vector> b, long long mod) { assert(a[0].size() == b.size()); int L = a.size(); int M = a[0].size(); int N = b[0].size(); vector> ret(L, vector(N, 0)); for (int i = 0; i < L; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < M; k++) { ret[i][j] += a[i][k] * b[k][j]; ret[i][j] %= mod; } } } return ret; } vector> mat_pow(vector> a, long long b, long long mod) { int N = a.size(); vector> ret(N, vector(N, 0)); for (int i = 0; i < N; i++) { ret[i][i] = 1; } while (b > 0) { if (b & 1) { ret = mul(ret, a, mod); } a = mul(a, a, mod); b >>= 1; } return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector> f = {{1, 1}, {1, 0}}; vector> g = mat_pow(f, n - 2, m); long long ans = g[0][0]; cout << ans << '\n'; }