#include<bits/stdc++.h> usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; constint N = 2e5 + 10; const ll mod = 998244353; ll D, u, v; int q, cnt[2][110]; vector<ll>vc; ll fac[N], inv[N]; ll power(ll a, int x){ ll ans = 1; while (x) { if (x & 1) ans = (ans * a) % mod; a = (a * a) % mod; x >>= 1; } return ans; } voidinit(){ fac[0] = 1; for (int i = 1; i < N; i++) { fac[i] = fac[i - 1] * i %mod; } inv[N - 1] = power(fac[N - 1], mod - 2); for (int i = N - 2; i >= 0; i--) { inv[i] = inv[i + 1] * (i + 1) % mod; } } voidsolve(ll x, int id){ for (int i = 0; i < (int)vc.size(); i++) { if (x%vc[i] == 0) { while (x%vc[i] == 0) { x /= vc[i]; cnt[id][i]++; } } } } intmain(){ scanf("%lld%d", &D, &q); init(); for (ll i = 2; i*i <= D; i++) { if (D%i == 0) { vc.push_back(i); while (D%i == 0)D /= i; } } if (D > 1)vc.push_back(D); while (q--) { ll ans = 1, sum = 0; scanf("%lld%lld", &u, &v); memset(cnt, 0, sizeof(cnt)); solve(u, 0); solve(v, 1); for (int i = 0; i < (int)vc.size(); i++) { if (cnt[0][i] < cnt[1][i]) { ans = ans * inv[cnt[1][i] - cnt[0][i]] % mod; sum += cnt[1][i] - cnt[0][i]; } } ans = ans * fac[sum] % mod; sum = 0; for (int i = 0; i < (int)vc.size(); i++) { if (cnt[0][i] > cnt[1][i]) { ans = ans * inv[cnt[0][i] - cnt[1][i]] % mod; sum += cnt[0][i] - cnt[1][i]; } } ans = ans * fac[sum] % mod; printf("%lld\n", ans); } return0; }