#include #include #include #include using namespace std; static inline constexpr vector prepare() { vector is_prime(10'000'000, true); is_prime[0] = is_prime[1] = false; for (uint32_t i = 2; i != 10'000'000; ++i) if (is_prime[i] && static_cast(i) * i < 10'000'000) for (uint32_t j = i * i; j < 10'000'000; j += i) is_prime[j] = false; vector candidates; candidates.reserve(10'000'000); for (uint32_t i = 9'999'999; i != 3; i -= 2) if (is_prime[i] && is_prime[i - 2]) candidates.push_back(static_cast(i - 2) * i); candidates.push_back(-1); return candidates; } static inline constexpr vector solve(const uint32_t& T, const vector& N) { const vector& candidates = prepare(); vector ans(T); for (uint32_t i = 0; i != T; ++i) ans[i] = *lower_bound(candidates.begin(), candidates.end(), N[i], greater()); return ans; } static inline void output(const uint32_t T, const vector& ans) { for (uint32_t i = 0; i != T; ++i) cout << ans[i] << '\n'; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); uint32_t T, i; cin >> T; vector N(T); for (i = 0; i != T; ++i) cin >> N[i]; output(T, solve(T, N)); return 0; }