#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
int n, m;
int f[2000010];
int mi[4000010], inv[4000010];
int ans;
inline int mo(int x) {
  if (x >= MOD) return x - MOD;
  return x;
}
inline int C(int x, int y) {
  if (x < y) return 0;
  return 1ll * mi[x] * inv[y] % MOD * inv[x - y] % MOD;
}
void init(int n) {
  mi[0] = mi[1] = 1;
  for (int i = 2; i <= n; i++) mi[i] = 1ll * mi[i - 1] * i % MOD;
  inv[0] = inv[1] = 1;
  for (int i = 2; i <= n; i++)
    inv[i] = 1ll * inv[MOD % i] * (MOD - MOD / i) % MOD;
  for (int i = 2; i <= n; i++) inv[i] = 1ll * inv[i - 1] * inv[i] % MOD;
}
inline int invs(int x) {
  if (x == 0) return 1;
  return 1ll * inv[x] * mi[x - 1] % MOD;
}
int main() {
  scanf("%d%d", &n, &m);
  init(n + m);
  int sum = 0;
  int T = 0;
  for (int i = 1; i <= n + 1; i++) {
    f[i] = 1ll * mo(1 - sum + MOD) * invs(m + n - i + 1) % MOD * m % MOD;
    T = mo(T + 1ll * i * f[i] % MOD);
    sum = mo(sum + f[i]);
  }
  for (int i = 1; i <= n; i++)
    ans = mo(ans + 1ll * (i + m) * invs(i) % MOD * (i & 1 ?: MOD - 1) % MOD *
                       C(n, i) % MOD);
  ans = 1ll * ans * T % MOD;
  printf("%d\n", ans);
}
