#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef vector> mat; long long MOD = 1000000007; mat mat_mul(const mat &A, const mat &B, long long m) { mat res(A.size(), vector(B[0].size(), 0)); for (int i = 0; i < (int)A.size(); i++) { for (int j = 0; j < (int)B[0].size(); j++) { for (int k = 0; k < (int)A[0].size(); k++) { res[i][j] = (res[i][j] + A[i][k] * B[k][j]) % m; } } } return res; } mat mat_pow(mat A, long long n, long long m) { mat res(A.size(), vector(A[0].size(), 0)); for (int i = 0; i <(int)A.size(); i++) res[i][i] = 1; while (n > 0) { if (n % 2 == 1) res = mat_mul(A, res, m); A = mat_mul(A, A, m); n /= 2; } return res; } int main() { long long n, m; cin >> n >> m; mat A(2, vector(2)); A[0][0] = 0; A[0][1] = 1; A[1][0] = 1; A[1][1] = 1; mat b(2, vector(1)); b[0][0] = 0; b[1][0] = 1; b = mat_mul(mat_pow(A, n-2, m), b, m); cout << b[1][0] << endl; }