#include <bits/stdc++.h>
using namespace std;
template <typename G1, typename G2 = G1, typename G3 = G1>
struct triple {
  G1 first;
  G2 second;
  G3 T;
};
const long long mod = 998244353;
long long sum(long long a, long long b) {
  a += b;
  if (a >= mod) a -= mod;
  if (a < 0) a += mod;
  return a;
}
long long pot(long long a, long long b) {
  long long x = 1;
  for (; b > 0; b >>= 1) {
    if (b & 1) x = x * a % mod;
    a = a * a % mod;
  }
  return x;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long n, m;
  cin >> n >> m;
  vector<long long> f(n + m + 1), in(n + m + 1), fi(n + m + 1);
  f[0] = 1;
  for (int i = 1; i <= n + m; i++) f[i] = f[i - 1] * i % mod;
  in[1] = 1;
  for (int i = 2; i <= n + m; i++) in[i] = mod - (mod / i) * in[mod % i] % mod;
  fi[0] = 1;
  for (int i = 1; i <= n + m; i++) fi[i] = fi[i - 1] * in[i] % mod;
  auto c = [&](long long n, long long m) {
    return f[n] * fi[m] % mod * fi[n - m] % mod;
  };
  long long x = 0;
  for (int i = 0; i <= n; i++)
    x = sum(x, f[n + m - i - 1] * fi[n - i] % mod * (i + 1) % mod);
  x = x * f[n] % mod * fi[m - 1] % mod;
  long long y = fi[m] * f[n + m] % mod;
  vector<long long> a(n + 1), b(n + 1);
  for (int i = n - 1; i >= 0; i--) {
    a[i] = x;
    b[i] = sum(b[i + 1], c(m - 1 + n - i - 1, m - 1) * a[i + 1] % mod);
    a[i] =
        sum(a[i], f[m + n] * fi[m + n - i] % mod * f[n - i] % mod * b[i] % mod);
    a[i] = a[i] *
           pot(sum(y, -f[n + m] * in[m + n - i] % mod * fi[m - 1] % mod),
               mod - 2) %
           mod;
  }
  cout << a[0] << '\n';
  return 0;
}
