#include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef unsigned long long ULLONG; typedef long long LLONG; static const LLONG MOD_NUM = 1000000007; //998244353; template static void get(_T& a) { std::cin >> a; } template static void get(_T& a, _T& b) { std::cin >> a >> b; } template static void get(_T& a, _T& b, _T& c) { std::cin >> a >> b >> c; } template static _T tp_abs(_T a) { if (a < (_T)0) { a *= (_T)-1; } return a; } static void exec(); int main() { exec(); fflush(stdout); return 0; } template static _T tp_modfact(_T n, _T k, _T mod = (_T)1) { _T count = 0; _T ans = 1; while (count < k) { ans = ans * (n - count) % mod; count++; } return ans; } template void tp_getPrimes(_T targ, std::map<_T, _T>& primes) { _T target = targ; _T i = 2; while ((i * i) <= target) { if ((target % i) == 0) { target /= i; primes[i]++; } else { i++; } } if (target > 1) { primes[target]++; } } static void exec() { int T; get(T); while (T--) { LLONG A, P; get(A, P); std::map prime; tp_getPrimes(P, prime); LLONG ans = -1; if (prime.size() == 1 && prime.begin()->second == 1) { ans = 1; } printf("%lld\n", ans); } }