#include #include uint64_t Mod; typedef struct Tuple_t { uint64_t fst; uint64_t snd; } Tuple; Tuple fib(uint64_t n) { if (n == 0) { Tuple ret = { 1, 0 }; return ret; } Tuple ret = fib(n >> 1); uint64_t a = ret.fst; uint64_t b = ret.snd; ret.fst = (a * a % Mod + b * b % Mod) % Mod; ret.snd = (2 * a * b % Mod + b * b % Mod) % Mod; if (n & 1) { uint64_t t = ret.fst; ret.fst = ret.snd; ret.snd = (t + ret.snd) % Mod; } return ret; } int main(void) { uint64_t N; scanf("%lu%lu", &N, &Mod); printf("%lu\n", (fib(N)).fst); return 0; }