#include using namespace std; const int B=500; const int P=998244353; const int N=200000; long long jie[N+5],njie[N+5],sjie[N+5],tjie[N+5]; inline long long calc(long long x,int y){ if(!y) return 1; long long z=calc(x,y/2); return z*z%P*(y%2? x:1)%P; } inline long long C(long long x,long long y){ if(x<0||y<0||x=1;i--){ tjie[i]=tjie[i+1]*jie[i+1]%P; } for(int i=1;i<=N;i++){ njie[i]=tjie[i]*sjie[i-1]%P; } int T; cin>>T; vector v; for(int i=1,a,b;i<=T;i++){ scanf("%d%d",&a,&b); ans[i]=(calc(2,a)-1+P)%P; quests into; into.n=a-1,into.m=b-1,into.p=i; v.push_back(into); } sort(v.begin(),v.end()); int n=0,m=0; long long now=1,inv2=calc(2,P-2); for(auto [a,b,p]:v){ while(na){ now=(now+C(n-1,m))*inv2%P; n--; } while(m>b){ ((now-=C(n,m))+=P)%=P; m--; } (ans[p]*=now)%=P; } for(int i=1;i<=T;i++){ printf("%lld\n",ans[i]); } return 0; }