#include #include #include using namespace std; int main(){ int N, M; cin >> N >> M; vector fir = {1, 0}; vector> mat = {{1, 1}, {1, 0}}; N--; while(N > 0){ if(N & 1){ vector nex(2); for(int i = 0; i < 2; i++){ for(int j = 0; j < 2; j++){ nex[i] += fir[j] * mat[i][j]; if(nex[i] >= M) nex[i] %= M; } } fir.swap(nex); } vector> mat2(2, vector(2)); for(int i = 0; i < 2; i++){ for(int j = 0; j < 2; j++){ for(int k = 0; k < 2; k++){ mat2[i][j] += mat[i][k] * mat[k][j]; if(mat2[i][j] >= M) mat2[i][j] -= M; } } } mat.swap(mat2); N >>= 1; } cout << fir[1] << endl; }