#include using namespace std; #define rep(i, j, k) for (register int i = j; i <= k; ++i) #define per(i, j, k) for (register int i = j; i >= k; --i) #define sz(x) (int)x.size() const long long mod = 998244353; using i64 = long long; using u64 = unsigned long long; using u32 = unsigned; using pii = pair; using pll = pair; #define int i64 mt19937_64 rng((u64)random_device {}() << 32 ^ random_device {}() ^ chrono::high_resolution_clock::now().time_since_epoch().count()); templateT rnd(T l,T2 r) { return uniform_int_distribution(l,r)(rng); } const int N = 2e5 + 10; i64 fac[N], ifac[N]; i64 qpow(i64 a, int b, i64 res = 1) { for (; b > 0; b >>= 1, a = a * a % mod) if (b & 1) res = res * a % mod; return res; } void init(int n = 2e5) { fac[0] = ifac[0] = 1; rep (i, 1, n) fac[i] = fac[i - 1] * i % mod, ifac[i] = qpow(fac[i], mod - 2); } i64 comb(int n, int k) { if (k > n || n < 0 || k < 0) return 0; return fac[n] * ifac[k] % mod * ifac[n - k] % mod; } signed main(int argc, char* argv[]) { // freopen(".in", "r", stdin); // freopen(".out", "w", stdout); ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); init(); int T; cin >> T; while (T--) { int n, m; cin >> n >> m; int cur = 0; rep (i, 0, m - 1) cur = (cur + comb(n - 1, i)) % mod; cout << (qpow(2, n) - 1 + mod) % mod * cur % mod << '\n'; } }