#include using namespace std; using ll=long long; using ull=unsigned long long; using P=pair; templateusing minque=priority_queue,greater>; templatebool chmax(T &a,const T &b){return (abool chmin(T &a,const T &b){return (a>b?(a=b,true):false);} templateistream &operator>>(istream &is,pair&p){is>>p.first>>p.second;return is;} templateistream &operator>>(istream &is,tuple&a){is>>std::get<0>(a)>>std::get<1>(a)>>std::get<2>(a);return is;} templateistream &operator>>(istream &is,array&a){for(auto&i:a)is>>i;return is;} templateistream &operator>>(istream &is,vector &a){for(auto &i:a)is>>i;return is;} templatevoid operator++(pair&a,int n){a.first++,a.second++;} templatevoid operator--(pair&a,int n){a.first--,a.second--;} templatevoid operator++(vector&a,int n){for(auto &i:a)i++;} templatevoid operator--(vector&a,int n){for(auto &i:a)i--;} #define overload3(_1,_2,_3,name,...) name #define rep1(i,n) for(int i=0;i<(int)(n);i++) #define rep2(i,l,r) for(int i=(int)(l);i<(int)(r);i++) #define rep(...) overload3(__VA_ARGS__,rep2,rep1)(__VA_ARGS__) #define reps(i,l,r) rep2(i,l,r) #define all(x) x.begin(),x.end() #define pcnt(x) __builtin_popcountll(x) #define fin(x) return cout<<(x)<<'\n',static_cast(0) #define yn(x) cout<<((x)?"Yes\n":"No\n") #define uniq(x) sort(all(x)),x.erase(unique(all(x)),x.end()) template inline int fkey(vector&z,T key){return lower_bound(z.begin(),z.end(),key)-z.begin();} ll myceil(ll a,ll b){return (a+b-1)/b;} template auto vec(const int (&d)[n],const T &init=T()){ if constexpr (id(d,init)); else return init; } #ifdef LOCAL #include #else #define debug(...) static_cast(0) #define debugg(...) static_cast(0) templateostream &operator<<(ostream &os,const pair&p){os<>testcase; for(int i=0;iprime_sieve(int n){ if(n<=6){ if(n<=1)return std::vector{}; else if(n==2)return std::vector{2}; else if(n<=4)return std::vector{2,3}; else return std::vector{2,3,5}; } static constexpr int mod30table[8]={1,7,11,13,17,19,23,29}; static constexpr uint8_t k_mask[][8] = { {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}, {0xfd, 0xdf, 0xef, 0xfe, 0x7f, 0xf7, 0xfb, 0xbf}, {0xfb, 0xef, 0xfe, 0xbf, 0xfd, 0x7f, 0xf7, 0xdf}, {0xf7, 0xfe, 0xbf, 0xdf, 0xfb, 0xfd, 0x7f, 0xef}, {0xef, 0x7f, 0xfd, 0xfb, 0xdf, 0xbf, 0xfe, 0xf7}, {0xdf, 0xf7, 0x7f, 0xfd, 0xbf, 0xfe, 0xef, 0xfb}, {0xbf, 0xfb, 0xf7, 0x7f, 0xfe, 0xef, 0xdf, 0xfd}, {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe}, }; static constexpr int c0[][8] = { {0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 1, 0, 1, 1, 1, 1}, {2, 2, 0, 2, 0, 2, 2, 1}, {3, 1, 1, 2, 1, 1, 3, 1}, {3, 3, 1, 2, 1, 3, 3, 1}, {4, 2, 2, 2, 2, 2, 4, 1}, {5, 3, 1, 4, 1, 3, 5, 1}, {6, 4, 2, 4, 2, 4, 6, 1}, }; static constexpr int c1[8]={6,4,2,4,2,4,6,2}; n++; int sz=(n+29)/30; std::vectorp(sz,0xff); { int r=n%30; if(r==0); else if(r==1)p.back()=0x00; else if(r<=7)p.back()=0x01; else if(r<=11)p.back()=0x03; else if(r<=13)p.back()=0x07; else if(r<=17)p.back()=0x0f; else if(r<=19)p.back()=0x1f; else if(r<=23)p.back()=0x3f; else if(r<=29)p.back()=0x7f; } p[0]=0xfe; int sq=((int)std::sqrt(n)+29)/30; for(int i=0;i<=sq;i++){ for(uint8_t f=p[i];f>0;f=f&(f-1)){ uint8_t l=__builtin_ctz(f); int m=mod30table[l]; int pm=i*30+m*2; for(int j=i*pm+m*m/30,k=l;jres{2,3,5}; for(int i=0;i0;j=j&(j-1))res.push_back(i*30+mod30table[__builtin_ctz(j)]); } for(int j=p.back();j>0;j=j&(j-1)){ int l=__builtin_ctz(j); int k=(p.size()-1)*30+mod30table[l]; if(k>t; vectorquery(t); cin>>query; ll mx=*max_element(all(query)); auto p=prime_sieve(sqrtl(mx)+50); vectorans; ans.reserve(p.size()+1); ans.push_back(-1); rep(i,(int)p.size()-1)if(p[i]+2==p[i+1])ans.push_back((ll)p[i]*p[i+1]); for(ll x:query)cout<<*prev(upper_bound(all(ans),x))<<'\n'; }