#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int bp(int first, int second) {
  if (second == 0) return 1;
  if (second == 1) return first % mod;
  if (second % 2) return ((long long)first * bp(first, second - 1)) % mod;
  int t = bp(first, second / 2);
  return ((long long)t * t) % mod;
}
const int N = 4000007;
int fact[N];
int rv[N];
int t[N];
int C(int n, int k) {
  int A = fact[n];
  int B = ((long long)rv[n - k] * rv[k]) % mod;
  return ((long long)A * B) % mod;
}
int RC(int n, int k) {
  int A = rv[n];
  int B = ((long long)fact[n - k] * fact[k]) % mod;
  return ((long long)A * B) % mod;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  fact[0] = 1, rv[0] = 1;
  fact[1] = 1, rv[1] = 1, t[1] = 1;
  for (int i = 2; i < N; ++i) {
    fact[i] = ((long long)fact[i - 1] * i) % mod;
    t[i] = ((long long)(mod - mod / i) * t[mod % i]) % mod;
    rv[i] = ((long long)rv[i - 1] * t[i]) % mod;
  }
  int n, m;
  cin >> n >> m;
  int ans = 0;
  for (int i = 1; i <= n; ++i) {
    int var = ((long long)m * t[m + i]) % mod;
    var = 1 - var;
    if (var < 0) var += mod;
    var = bp(var, mod - 2);
    var = ((long long)var * C(n, i)) % mod;
    if (i % 2 == 0) {
      var = -var;
      if (var < 0) var += mod;
    }
    ans += var;
    if (ans >= mod) ans -= mod;
  }
  int kek = 0;
  for (int i = 0; i <= n; ++i) {
    int a = 1;
    a = ((long long)a * fact[n]) % mod;
    a = ((long long)a * fact[n + m - i]) % mod;
    a = ((long long)a * rv[n - i]) % mod;
    a = ((long long)a * rv[n + m]) % mod;
    kek += a;
    if (kek >= mod) kek -= mod;
  }
  cout << ((long long)ans * kek) % mod;
}
