#include using namespace std; typedef long long ll; typedef long double ld; typedef pair Pii; typedef pair Pil; typedef pair Pll; typedef pair Pli; #define fi first #define se second const ll MOD = 1e9 + 7; const ll MOD2 = 998244353; const ll MOD3 = 1812447359; const ll INF = 1ll << 62; const double PI = 2 * asin(1); void yes() {printf("yes\n");} void no() {printf("no\n");} void Yes() {printf("Yes\n");} void No() {printf("No\n");} void YES() {printf("YES\n");} void NO() {printf("NO\n");} typedef vector > Mat; ll N, M; Mat MatMal(Mat X, Mat Y){ int I = X.size(), J = Y[0].size(); Mat ans; ans.resize(I); for (int i = 0; i < I; i++){ ans[i].resize(J); for (int j = 0; j < X[0].size(); j++){ for (int k = 0; k < J; k++){ ans[i][k] += X[i][j] * Y[j][k]; ans[i][k] %= M; } } } return ans; } Mat MatPow(Mat M, ll P){ int N = M.size(); Mat ans; ans.resize(N); for (int i = 0; i < N; i++) ans[i].resize(N); if (P == 0){ for (int i = 0; i < N; i++) ans[i][i] = 1; return ans; } if (P % 2 == 0){ return MatPow(MatMal(M, M), P / 2); } return MatMal(MatPow(MatMal(M, M), P / 2), M); } int main(){ cin >> N >> M; Mat A(2); A[0] = {1, 1}; A[1] = {1, 0}; Mat ans = MatPow(A, N - 2); cout << ans[0][0] << endl; return 0; }