#include <bits/stdc++.h>
#pragma GCC optimize("O2")
#pragma GCC optimize("unroll-loops")
using namespace std;
long long power(long long a, long long b, long long md) {
  return (!b ? 1
             : (b & 1 ? a * power(a * a % md, b / 2, md) % md
                      : power(a * a % md, b / 2, md) % md));
}
const int xn = 2e6 + 10;
const int xm = -20 + 10;
const int sq = 320;
const int inf = 1e9 + 10;
const long long INF = 1e18 + 10;
const int mod = 998244353;
const int base = 257;
int n, m, ans, pw, fact[xn];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> m;
  fact[0] = 1;
  for (int i = 1; i <= n + 1; ++i) fact[i] = 1ll * fact[i - 1] * i % mod;
  pw = power(fact[n + 1], mod - 2, mod);
  for (int i = n; i >= 1; --i) {
    pw = 1ll * pw * (i + 1) % mod;
    ans = (ans + 1ll * (m + n + 1 - i) * pw % mod * fact[i - 1] % mod) % mod;
  }
  cout << (1ll * ans * power(m + 1, mod - 2, mod) % mod * m % mod + n + 1) % mod
       << '\n';
  return 0;
}
