#include<iostream> #include<cmath> #include<unordered_map> using namespace std; typedef long long ll;
int ksm(int a, int b, int p) { int res = 1; while (b) { if (b & 1) res = (ll)res * a % p; a = (ll)a * a % p; b >>= 1; } return res; }
int BSGS(int a, int b, int p) { if (1 % p == b % p) return 0; unordered_map<int, int> hash; int k = sqrt(p) + 1; for (int i = 0, j = b % p; i < k; i++, j = (ll)j * a % p) hash[j] = i; int ak = ksm(a, k, p); for (int i = 1, j = ak; i <= k; i++, j = (ll)j * ak % p) if (hash.count(j)) return i * k - hash[j]; return -1; }
int main() { int g, p; scanf("%d%d", &g, &p); int n; scanf("%d", &n); while (n--) { int A, B; scanf("%d%d", &A, &B); int a = BSGS(g, A, p); int b = BSGS(g, B, p); printf("%d\n", ksm(g, (ll)a * b % (p - 1), p)); } return 0; }