#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using ld = long double; using P = pair; #define rep(i, N) for (int i = 0; i < N; i++) #define rep2(i, l, r) for (ll i = (ll)l; i < (ll)(r); i++) #define INF 1000000000 #define MAX 200001 #define PI 3.141592653589793 const ll MOD = 1000000007; /*clock_t start = clock(); clock_t end = clock(); const double time = static_cast(end - start) / CLOCKS_PER_SEC * 1000.0; cout << time << endl;*/ template inline string toString(const T &a) {ostringstream oss; oss << a; return oss.str();}; vector> mul(vector> &A, vector> &B,ll mod){ vector> C(A.size(),vector(B[0].size())); for(int i = 0; i < A.size(); i++){ for(int k = 0; k < B.size(); k++){ for(int j = 0; j < B[0].size(); j++){ ll t = (A[i][k]*B[k][j])%mod; C[i][j] = (C[i][j]+t)%mod; C[i][j] = (C[i][j]+mod)%mod; } } } return C; } vector> Pow(vector> &A,ll n,ll mod){ vector> B(A.size(),vector(A.size())); for(int i = 0; i < A.size(); i++) B[i][i] = 1LL; while(n > 0){ if(n&1) B = mul(B,A,mod); A = mul(A,A,mod); n>>=1; } return B; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); ll N,M; cin >> N >> M; vector> A(2,vector(2)); vector> C(2,vector(1)); A[0][0] = 1; A[0][1] = 1; A[1][0] = 1; A[1][1] = 0; C[0][0] = 1; C[1][0] = 0; vector> B = Pow(A,N-2,M); vector> ans = mul(B,C,M); cout << ans[0][0] << endl; }