#include <bits/stdc++.h>
template <class T>
void read(T &);
template <class T>
void write(const T &);
typedef const long long &cll;
typedef const int &ci;
const int iinf = 2147483647;
const long long llinf = 9223372036854775807ll;
using std::abs;
using std::max;
using std::min;
const int N = 2000005;
const int Mod = 998244353;
int pow(int a, int b, int m);
int inv[N];
int n, m;
int main() {
  read(n), read(m);
  inv[1] = 1;
  for (int i = 2; i <= n; ++i) {
    inv[i] = (Mod - Mod / i) * 1ll * inv[Mod % i] % Mod;
  }
  int ans = 0;
  for (int i = 1; i <= n; ++i) {
    ans = (ans + inv[i]) % Mod;
  }
  ans = ans * 1ll * m % Mod;
  write((n * 1ll * pow(m + 1, Mod - 2, Mod) % Mod + 1) * (ans + 1) % Mod),
      putchar('\n');
  return 0;
}
template <class T>
inline void read(T &Re) {
  T k = 0;
  char ch = getchar();
  int flag = 1;
  while (!(ch >= '0' && ch <= '9')) {
    if (ch == '-') {
      flag = -1;
    }
    ch = getchar();
  }
  while ((ch >= '0' && ch <= '9')) {
    k = (k << 1) + (k << 3) + ch - '0';
    ch = getchar();
  }
  Re = flag * k;
}
template <class T>
inline void write(const T &Wr) {
  if (Wr < 0) {
    putchar('-');
    write(-Wr);
  } else {
    if (Wr < 10) {
      putchar(Wr + '0');
    } else {
      write(Wr / 10);
      putchar((Wr % 10) + '0');
    }
  }
}
int pow(int a, int b, int m) {
  int ans = 1, now = a;
  while (b) {
    if (b & 1) {
      ans = ans * 1ll * now % m;
    }
    now = now * 1ll * now % m;
    b >>= 1;
  }
  return ans;
}
