#include using namespace std; const int N=2e5+5; const int mod=998244353; const int pw2=(mod+1)/2; typedef long long ll; int T,mx; int in[N]; int fac[N],inv[N]; struct Query{ int n,m,id; } Qs[N]; int qpow(int a,int b){ int res=1; while(b){ if(b&1) res=(ll)res*a%mod; a=(ll)a*a%mod; b>>=1; } return res; } bool cmp(Query A,Query B){ return (in[A.n]!=in[B.n]?A.n=0;i--) inv[i]=(ll)inv[i+1]*(i+1)%mod; int sq=sqrt(mx); for(int i=1;i<=mx;i++) in[i]=(i-1)/sq+1; sort(Qs+1,Qs+T+1,cmp); for(int i=1;i<=T;i++){ while(nnQs[i].n) del1(); while(mm>Qs[i].m) del2(); ans[Qs[i].id]=(ll)(qpow(2,Qs[i].n)-1)*res%mod; } for(int i=1;i<=T;i++) printf("%d\n",ans[i]); return 0; }