#include<bits/stdc++.h>#define INF 0x3f3f3f3fusingnamespace std;typedeflonglong ll;inlineintread(){int x =0, f =1;char c =getchar();while(c <'0'|| c >'9'){if(c =='-') f =-f; c =getchar();}while(c >='0'&& c <='9'){ x = x *10+ c -'0'; c =getchar();}return x * f;}constint maxN =30;constint maxBit =70;constint p =998244353;
ll qpow(ll x, ll y){
ll base = x, ans =1;while(y){if(y &1)
ans *= base, ans %= p;
base *= base, base %= p;
y >>=1;}return ans % p;}
ll C(ll n, ll m){if(n < m)return0;if(n ==0)return1;
m =min(m, n - m);
ll up =1, down =1;for(int i =0; i < m;++ i ){
up *=(n - i), up %= p;
down *=(i +1), down %= p;}
ll down_inverse =qpow(down, p -2);return up * down_inverse % p;}int n, m;intmain(){while(~scanf("%d%d",&n,&m)){if(m < n -1|| n ==2){puts("0");continue;}
ll ans =(C(m, n -1)*(n -2)% p)*(qpow(2, n -3)% p)% p;
cout << ans << endl;}return0;}