#include using namespace std; const int MAXP = 1000010; vector primes; bitset isp; void sieve() { isp.set(); isp[0]=isp[1]=0; for (long long i = 2; i < MAXP; i++) if (isp[i]) { primes.push_back(i); for (long long j = i*i; j < MAXP; j += i) isp[j]=0; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); sieve(); int T; cin >> T; while (T--) { int n, k; cin >> n >> k; if (n == k) { cout << "-1\n"; continue; } long long ans = -1; // Try every prime p > k for (int p : primes) { if (p > k) { if (p > n) break; ans = max(ans, (long long)(n / p) * p); } } // If n itself has a prime factor > k ? n is also a candidate int x = n; for (int p : primes) { if ((long long)p * p > x) break; while (x % p == 0) x /= p; } if (x > k) ans = max(ans, (long long)n); cout << (ans == -1 ? -1 : ans) << "\n"; } }