#include #include #include #include #if defined FIO auto I_=freopen("1.in","r",stdin); auto O_=freopen("1.out","w",stdout); #endif #if defined BUG #define bug(x...) ({x;void();}) #else #define bug(x...) ({}) #endif #define LL long long #define pb push_back #define vec vector #define arr array #define SIZ(x) (int)(x).size() #define ALL(x) begin(x),end(x) #define RNG(x,l,r) &(x)[l],1+&(x)[r] #define rep(i,l,r) for(int i=(l),i##_=(r);i<=i##_;i++) #define per(i,l,r) for(int i=(l),i##_=(r);i>=i##_;i--) #define inline inline __attribute__((always_inline)) templateconstexpr inline void tomin(U&x,V&&y)noexcept{if(yconstexpr inline void tomax(U&x,V&&y)noexcept{if(y>x)x=y;} using namespace std;namespace __{ template struct mint{ int x; inline mint(){} inline mint(int t){ x=(t+P)%P; } inline mint(LL t){ x=int(t%P); } inline operator int()noexcept{ return x; } inline mint operator+(mint t){ return (x+t.x)%P; } inline mint operator-(mint t){ return (x-t.x+P)%P; } inline mint operator*(mint t){ return 1ll*x*t.x%P; } inline mint& operator+=(mint t){ return *this=*this+t; } inline mint& operator-=(mint t){ return *this=*this-t; } inline mint& operator*=(mint t){ return *this=*this*t; } }; #define mint mint

constexpr int N=2e5+5,P=998244353; inline mint fpw(mint a,int b,mint r=1){ for(;b;a*=a,b>>=1)if(b&1)r*=a; return r; } int Q; struct qq{int a,b,idx,bk;}q[N+5]; mint ans[N]; mint fac[N],invfac[N]; void init(int n){ fac[0]=1; rep(i,1,n) fac[i]=fac[i-1]*mint(i); invfac[n]=fpw(fac[n],P-2); per(i,n,1) invfac[i-1]=invfac[i]*mint(i); } inline mint binom(int a,int b){ return aj.b : i.bq[i].a) ld(), l--; while(r>q[i].b) rd(), r--; ans[q[i].idx]*=cur; } } void main(){ cin.tie(0)->sync_with_stdio(0); // signed CSE=0; for(cin>>CSE; CSE--; clear()) [&](){ cin>>Q; rep(i,1,Q){ int n,m; cin>>n>>m; ans[i]=fpw(2,n)-mint(1); q[i]={n-1,m-1,i,0}; } init(2e5); modui(); rep(i,1,Q) cout<