#include #define LOOP(n) for (int _i = 0; _i < (n); _i++) #define REP(i, n) for (int i = 0; i < (n); ++i) #define RREP(i, n) for (int i = (n); i >= 0; --i) #define FOR(i, r, n) for (int i = (r); i < (n); ++i) #define ALL(obj) begin(obj), end(obj) #define yes "Yes" #define no "No" using namespace std; typedef long long ll; typedef pair pii; typedef pair pll; typedef pair pli; typedef pair pil; typedef vector> vvi; typedef vector> vvl; const vector alpha = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; int dx[4] = {0, 1, 0, -1}; int dy[4] = {1, 0, -1, 0}; const ll INF = 1000000007; const ll MOD = 998244353; #define mpair(a,b) make_pair((a),(b)) template inline bool chmax(T &a, T b) { return ((a < b) ? (a = b, true) : (false)); } template inline bool chmin(T &a, T b) { return ((a > b) ? (a = b, true) : (false)); } ll N,M; vector memo(33); vvl matmul(vvl A, vvl B) { vvl res(2, vector(2, 0)); REP(i,2) { REP(j,2) { REP(k,2) { res[i][j] = (res[i][j] + A[i][k] * B[k][j]) % M; } } } return res; } int main(){ cin >> N >> M; memo[0]={{1,1},{1,0}}; if (N==1) { cout << 1 << endl; return 0; } REP(i,31){ memo[i+1]=matmul(memo[i],memo[i]); } N--; vvl res; bool first=true; REP(i,32){ if (1LL<