#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
const int FACT_MAX = 4000005;
long long fact[FACT_MAX], fact_inv[FACT_MAX];
long long modpow(long long a, long long n) {
  if (n == 0) return 1;
  if (n % 2) {
    return ((a % 998244353) * (modpow(a, n - 1) % 998244353)) % 998244353;
  } else {
    return modpow((a * a) % 998244353, n / 2) % 998244353;
  }
}
void make_fact() {
  long long val = 1;
  fact[0] = 1;
  for (int i = 1; i < FACT_MAX; i++) {
    val *= i;
    val %= 998244353;
    fact[i] = val;
  }
  fact_inv[FACT_MAX - 1] = modpow(fact[FACT_MAX - 1], 998244353 - 2);
  for (int i = FACT_MAX - 2; i >= 0; i--) {
    fact_inv[i] = fact_inv[i + 1] * (i + 1) % 998244353;
  }
}
long long comb(long long n, long long k) {
  long long ret = 1;
  ret *= fact[n];
  ret *= fact_inv[k], ret %= 998244353;
  ret *= fact_inv[n - k], ret %= 998244353;
  return ret;
}
long long icomb(long long n, long long k) {
  long long ret = 1;
  ret *= fact_inv[n];
  ret *= fact[k], ret %= 998244353;
  ret *= fact[n - k], ret %= 998244353;
  return ret;
}
long long n, m;
long long dp[2000005];
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);
  make_fact();
  cin >> n >> m;
  dp[n] = 0;
  long long sum = 0, sum2 = 1, csum = 1;
  for (int i = n - 1; i >= 0; i--) {
    long long bunsi = comb(m + n - i - 1, m - 1), bunbo = icomb(m + n - i, m);
    long long divi = (1 + 998244353 - bunsi * bunbo % 998244353);
    if (divi >= 998244353) divi -= 998244353;
    long long alpha =
        (n + m + 1) * modpow(n + m - i + 1, 998244353 - 2) % 998244353;
    csum += bunsi;
    if (csum >= 998244353) csum -= 998244353;
    sum2 += csum;
    if (sum2 >= 998244353) sum2 -= 998244353;
    long long tmp = (sum + alpha * sum2 % 998244353);
    if (tmp >= 998244353) tmp -= 998244353;
    tmp *= bunbo, tmp %= 998244353;
    tmp *= modpow(divi, 998244353 - 2), tmp %= 998244353;
    dp[i] = tmp;
    sum += bunsi * dp[i] % 998244353;
    if (sum >= 998244353) sum -= 998244353;
  }
  cout << dp[0] << endl;
  return 0;
}
