#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v, y, m; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; ll gcd(ll a, ll b) { if (b == 0) return abs(a); else return gcd(b, a % b); } ll extgcd(ll a, ll b, ll& x, ll& y) { if (b == 0) { x = (a >= 0) ? 1 : -1; y = 0; return abs(a); } else { ll res = extgcd(b, a % b, y, x); y -= (a / b) * x; return res; } } ll mod_inverse(ll a, ll m) { ll x, y; extgcd(a, m, x, y); return (m + x % m) % m; } int main() { int T; cin >> T; while (T--) { int N, M; cin >> N >> M; if (M <= 1000000) { if (N >= M) cout << 0 << endl; else { ll ans = 1 % M; for (int i = 1; i <= N; i++) ans = (ans * i) % M; cout << ans << endl; } } else { bool prime = true; for (int i = 2; i * i <= M; i++) if (M % i == 0) prime = false; if (!prime || N >= M) cout << 0 << endl; else { ll ans = M - 1; for (int i = N + 1; i < M; i++) ans = (ans * mod_inverse(i, M)) % M; cout << ans << endl; } } } }