func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MOD = 998244353;   long long add(long long x, long long y, long long CMOD = MOD) {     return (x + y + CMOD + CMOD) % CMOD;   }   long long mult(long long x, long long y, long long CMOD = MOD) {     return add(x, 0) * add(y, 0) % CMOD;   }   long long fast_expo(long long x, long long y, long long CMOD = MOD) {     if (x == 0) return 0;     if (y == 0) return 1;     long long ans = fast_expo(x, y / 2, CMOD);     ans = mult(ans, ans, CMOD);     if (y & 1) ans = mult(ans, x, CMOD);     return ans;   }   mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());   long long gen(long long x, long long y) {     if (x == y) return x;     return x + rng() % (y - x + 1);   }   const int TAM = 2e5 + 100;   const long long INF = LLONG_MAX / 4;   long long fact[TAM];   long long ifact[TAM];   long long n, m;   void pre() {     fact[0] = 1;     for (int i = 1; i < TAM; i++) fact[i] = mult(fact[i - 1], i);     for (int i = 0; i < TAM; i++) ifact[i] = fast_expo(fact[i], MOD - 2);   }   long long comb(long long x, long long y) {     return mult(fact[x], mult(ifact[y], ifact[x - y]));   }   int main() {     pre();     cin >> n >> m;     if (n == 2) {       puts( 0 );       return 0;     }     long long ans = 0;     for (long long x = n - 1; x <= m; x++) {       long long factor = mult(comb(x - 2, n - 3), fast_expo(2, n - 3));       ans = add(ans, mult(x - 1, factor));     }     cout << ans << endl;     return 0;   }   