#include #define int long long #define endl "\n" using namespace std; int MOD = 998244353; int binpow(int a, int p) { if (p==0) return 1; if (p%2) return binpow(a,p-1)*a%MOD; int t=binpow(a,p/2); return t*t%MOD; } int inv(int a) { return binpow(a,MOD-2); } int ncr(int n, int r) { int rl = 1; for (int i = 1; i <= r; i++) { rl=(rl*(n-(i-1+MOD)%MOD+MOD)%MOD)%MOD; rl = (rl * inv(i))%MOD; } return rl; } void solve() { int n,m; cin>>n>>m; if (n>=22 || (binpow(2,n)/2 + 1)>m) { // cout << " OR HERE " << endl; int A = ncr(binpow(2,n)-1, m); int B = binpow(2,n)*inv(2)%MOD; int C = ncr(B-1,m-1); // cout << A << " " << B << " " << C << endl; cout << (A - ((binpow(2,n)-1+MOD)%MOD*C)%MOD + MOD)%MOD << endl; } else { // cout << " HERE " << endl; cout << ncr(binpow(2,n)-1,m) << endl; } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); // int t;cin>>t;while(t--) solve(); }