#include <cstdio>
#include <cctype>
typedef long long ll;
template <typename T>
T read() {
T x = 0, f = 1;
char ch = getchar();
for (; !isdigit(ch); ch = getchar()) if (ch == '-') f = -1;
for (; isdigit(ch); ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);
return x * f;
}
template <typename T>
void write(T x) {
if (x < 0) putchar('-'), x = -x;
int sta[64], top;
do {
sta[++top] = x % 10;
x /= 10;
} while (x);
while (top) {
putchar(sta[top--] ^ 48);
}
putchar('\n');
}
ll n = read<ll>();
__int128 k = read<__int128>(), p = read<__int128>();
__int128 a = 1, b = 1;
int main() {
freopen("noi2011_rabbit.in", "r", stdin);
freopen("noi2011_rabbit.out", "w", stdout);
if (n == 1) {
write(a);
} else if (n == 2) {
write(b);
} else {
for (ll i = 3; i <= n; ++i) {
__int128 t = a + b;
a = b;
b = t;
if (b % k == 1) b--;
}
write(b % p);
}
return 0;
}