#include #include using namespace std; vector isprime; vector sieve(int n){ vector prime; isprime=vector(n+1,true); isprime[1]=false; for (int i=2;i<=n;i++){ if (!isprime[i]) continue; prime.push_back(i); for (int j=i*2;j<=n;j+=i){ isprime[j]=false; } } return prime; } template struct Matrix{ array,N> val; Matrix(){ for (int i=0;i &operator[](int i){return val[i];} const array &operator[](int i)const{return val[i];} Matrix operator*(const Matrix &b){ Matrix a=*this,c; for (int i=0;i0){ if (k%2==1) ret=ret*m; m=m*m; k/=2; } return ret; } }; using mint=atcoder::modint998244353; using mat=Matrix; void solve(){ int n,m; cin>>n>>m; sieve(m); isprime[0]=false; if (n==1){ int ans=0; for (int i=0;i<=m;i++) ans+=isprime[i]; cout<>t; while (t--) solve(); }