#include <iostream>
using namespace std;
const int MAX = 1000000;
bool isPrime[MAX + 1];
long long primeList[80000]; // Tối đa ~78k số nguyên tố <= 1e6
long long primePairs[80000]; // Chứa p[i] * p[i+1]
int primeCount = 0;
int pairCount = 0;
// Sàng nguyên tố đơn giản
void sieve() {
for (int i = 0; i <= MAX; ++i)
isPrime[i] = true;
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= MAX; ++i) {
if (isPrime[i]) {
for (int j = i * i; j <= MAX; j += i)
isPrime[j] = false;
}
}
// Ghi lại các số nguyên tố
for (int i = 2; i <= MAX; ++i) {
if (isPrime[i]) {
primeList[primeCount++] = i;
}
}
// Sinh các tích của 2 số nguyên tố liên tiếp
for (int i = 0; i + 1 < primeCount; ++i) {
long long product = primeList[i] * primeList[i + 1];
if (product > 1e12) break; // Giới hạn để tránh tràn
primePairs[pairCount++] = product;
}
}
// Tìm phần tử lớn nhất trong primePairs[] mà ≤ n
long long maxProductNotExceeding(long long n) {
int left = 0, right = pairCount - 1;
long long result = 0;
while (left <= right) {
int mid = (left + right) / 2;
if (primePairs[mid] <= n) {
result = primePairs[mid];
left = mid + 1;
} else {
right = mid - 1;
}
}
return result;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
sieve(); // Chuẩn bị trước các cặp số nguyên tố
int testCases;
cin >> testCases;
while (testCases--) {
long long n;
cin >> n;
long long maxFit = maxProductNotExceeding(n);
cout << (n - maxFit) << '\n';
}
return 0;
}
//code theo gpt =))