#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((int)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; // 1. Try multiples of every prime p > k and p <= n for (int p : primes) { if (p > k) { if (p > n) break; ans = max(ans, (long long)(n / p) * p); } } // 2. Check if n itself has a large prime factor > k // (for when n is prime >1e6 or has large prime factor not caught above) 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 << "\n"; } return 0; }