#include //以下cout時の色設定 #define COUTRESET "\033[0m" // 色をリセット #define COUTRED "\033[31m" // 赤色 #define COUTGREEN "\033[32m" // 緑色 #define COUTYELLOW "\033[33m" // 黄色 #define COUTBLUE "\033[34m" // 青色 using namespace std; using ll=long long; using ull=unsigned long long; using ld=long double; using P=pair; const ll INF=1e17; const vector dx={0,0,1,-1,1,1,-1,-1}; const vector dy={1,-1,0,0,1,-1,-1,1}; #define rep(i,N) for(int i=0;i ostream& operator<<(ostream &os,pair &pai){ return os<<"("< ostream& operator<<(ostream &os,vector vec){ for(auto val:vec){ os< istream& operator>>(istream &is,vector &vec){ for(int i=0;i<(int)vec.size();i++){ is>>vec[i]; } return is; } template istream& operator>>(istream &is,pair &pai){ is>>pai.first>>pai.second; return is; } template void print(const T &vec){ int i=0; for(auto val:vec){ cout< void print2(const vector> &vec){ int i=0; for(auto v:vec){ cout< void chmin(T &a,T b){ if(a>b){ a=b; } return; } template void chmax(T &a,T b){ if(a min_divi; vector is_p; Eratosthenes(ll N){ r=N; min_divi.resize(r+1,-1); is_p.resize(r+1,true); min_divi[0]=0; min_divi[1]=1; is_p[0]=false; is_p[1]=false; for(ll i=2;i*i<=r;i++){ if(is_p[i]){ for(ll j=2;i*j<=r;j++){ if(is_p[i*j]){ is_p[i*j]=false; min_divi[i*j]=min(i,j); } } } } } bool is_prime(ll n){ assert(0<=n && n<=r); return is_p[n]; } vector prime_fact(ll n){ vector ret; while(n!=1){ if(is_p[n]){ ret.push_back(n); n/=n; break; } ret.push_back(min_divi[n]); n/=min_divi[n]; } return ret; } }; int main(){ cin.tie(0)->sync_with_stdio(0); int T; cin>>T; Eratosthenes et(10000005); vector prime; rep(i,10000004){ if(et.is_prime(i+1)){ prime.push_back(i+1); } } vector futago; rep(i,(int)prime.size()-1){ if(prime[i]+2==prime[i+1]){ futago.push_back(prime[i]); } } rep(i,T){ ll N; cin>>N; if(N<15){ cout<<-1<<"\n"; continue; } ll sqN=1e8; ll ok=0; ll ng=1e8; while(abs(ok-ng)>1){ ll mid=(ok+ng)/2; if(mid*mid+2*mid<=N){ ok=mid; }else{ ng=mid; } } sqN=ok; ll p=*(--upper_bound(all(futago),sqN)); cout<