#include <bits/stdc++.h>
const int MAXN = 2e6 + 5;
int n, m;
const int ha = 998244353;
int fac[MAXN], inv[MAXN];
inline int qpow(int a, int n = ha - 2) {
  int res = 1;
  while (n) {
    if (n & 1) res = 1ll * res * a % ha;
    a = 1ll * a * a % ha;
    n >>= 1;
  }
  return res;
}
inline void prework() {
  fac[0] = 1;
  for (int i = 1; i <= MAXN - 1; ++i) fac[i] = 1ll * fac[i - 1] * i % ha;
  inv[MAXN - 1] = qpow(fac[MAXN - 1]);
  for (int i = MAXN - 2; i >= 0; --i) inv[i] = 1ll * inv[i + 1] * (i + 1) % ha;
}
inline int C(int n, int m) {
  if (n < m) return 0;
  return 1ll * fac[n] * inv[m] % ha * inv[n - m] % ha;
}
int main() {
  prework();
  scanf("%d%d", &n, &m);
  int t = 1ll * inv[m + 1] * fac[m] % ha * n % ha;
  (t += 1) %= ha;
  int res = 0;
  for (int i = 1; i <= n; ++i) {
    int gx = 1ll * C(n, i) * (m + i) % ha * inv[i] % ha * fac[i - 1] % ha;
    if ((i + 1) & 1) gx = ha - gx;
    (res += gx) %= ha;
  }
  res = 1ll * res * t % ha;
  printf("%d\n", res);
  return 0;
}
