#include using namespace std; const int64_t mod = 998'244'353; int64_t mpow(int64_t b, int64_t e) { int64_t r = 1; while (e) { if (e & 1) { r *= b; r %= mod; } b *= b; b %= mod; e >>= 1; } return r; } inline int64_t minv(int64_t b) { return mpow(b, mod - 2); } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int64_t n; int m; cin >> n >> m; int64_t f = 0; for (int i = 0; i < m; ++i) { int64_t sum_max_upper = (n % mod) * (i + 2); sum_max_upper %= mod; sum_max_upper *= minv(2); sum_max_upper %= mod; sum_max_upper *= mpow(i + 1, n); sum_max_upper %= mod; int64_t sum_max_lower = (n % mod) * (i + 1); sum_max_lower %= mod; sum_max_lower *= minv(2); sum_max_lower %= mod; sum_max_lower *= mpow(i, n); sum_max_lower %= mod; int64_t sum_min_upper = (n % mod) * (m + i + 2); sum_min_upper %= mod; sum_min_upper *= minv(2); sum_min_upper %= mod; sum_min_upper *= mpow(m - i - 1, n); sum_min_upper %= mod; int64_t sum_min_lower = (n % mod) * (m + i + 1); sum_min_lower %= mod; sum_min_lower *= minv(2); sum_min_lower %= mod; sum_min_lower *= mpow(m - i, n); sum_min_lower %= mod; int64_t sum_max = sum_max_upper - sum_max_lower; sum_max %= mod; int64_t sum_min = sum_min_lower - sum_min_upper; sum_min %= mod; f += sum_max * (i + 1); f %= mod; f -= sum_min * (i + 1); f %= mod; } f = (f + mod) % mod; cout << f << "\n"; return 0; }