#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const long long maxn = 4e6 + 100;
const long long inf = 1e16;
const long long mod = 998244353;
long long n, m, k, t;
inline long long step(long long a, long long first) {
  if (first == 0) {
    return 1;
  }
  if (first % 2 == 1) {
    return step(a, first - 1) * a % mod;
  }
  long long t = step(a, first / 2);
  return t * t % mod;
}
long long F[maxn];
long long RF[maxn];
inline long long del(long long a, long long b) {
  return a * step(b, mod - 2) % mod;
}
inline long long del1(long long a, long long b) {
  return a * F[b - 1] % mod * RF[b] % mod;
}
long long getc(long long n, long long k) {
  return del(F[n], F[k] * F[n - k] % mod);
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long q, w, e, a, b, c;
  F[0] = 1;
  for (q = 1; q < maxn; q++) {
    F[q] = F[q - 1] * q % mod;
  }
  RF[maxn - 1] = del(1, F[maxn - 1]);
  for (q = maxn - 2; q >= 0; q--) {
    RF[q] = RF[q + 1] * (q + 1) % mod;
  }
  cin >> n >> m;
  long long it = 1 + m;
  for (q = 2; q <= n; q++) {
    it += del(m, q);
    it %= mod;
  }
  long long len = del(n, m + 1) + 1;
  cout << it * len % mod;
  return 0;
}
