#include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; const int MX = 1000010; mint f[MX],inv[MX],fi[MX]; constexpr ll mod = 998244353; void solve(){ inv[1] = 1; for(int i=2;i using namespace std; int main(){ solve(); int i,n,m; cin >> n >> m; vector F(n + 1),G(n + 1); for(i=0;i<=n;i++){ mint x = m + 1 - i>=0 ? pw(m + 1 - i,n) : 0; mint val = x*fi[i]; F[i] = i&1 ? -val : val; } for(i=0;i<=n;i++) G[i] = fi[i]; vector H = convolution(F,G); mint ans = 0; for(i=1;i<=min(n,m + 1);i++){ ans += (2*i - 1)*f[i]*H[i]; } cout << ans.val() << "\n"; // for(i=1;i<=n;i++) cout << (H[i]*f[i]).val() << " "; // cout << "\n"; }