zscoder has a deck of $n+m$ custom-made cards, which consists of $n$ cards labelled from $1$ to $n$ and $m$ jokers. Since zscoder is lonely, he wants to play a game with himself using those cards. 

Initially, the deck is shuffled uniformly randomly and placed on the table. zscoder has a set $S$ which is initially empty. 

Every second, zscoder draws the top card from the deck.   If the card has a number $x$ written on it, zscoder removes the card and adds $x$ to the set $S$.  If the card drawn is a joker, zscoder places all the cards back into the deck and reshuffles (uniformly randomly) the $n+m$ cards to form a new deck (hence the new deck now contains all cards from $1$ to $n$ and the $m$ jokers). Then, if $S$ currently contains all the elements from $1$ to $n$, the game ends. Shuffling the deck doesn't take time at all. 

What is the expected number of seconds before the game ends? We can show that the answer can be written in the form $\frac{P}{Q}$ where $P, Q$ are relatively prime integers and $Q \neq 0 \bmod 998244353$. Output the value of $(P \cdot Q^{-1})$ modulo $998244353$.


-----Input-----

The only line of the input contains two integers $n$ and $m$ ($1 \le n, m \le 2 \cdot 10^{6}$).


-----Output-----

Output a single integer, the value of $(P \cdot Q^{-1})$ modulo $998244353$.


-----Examples-----
Input
2 1

Output
5

Input
3 2

Output
332748127

Input
14 9

Output
969862773



-----Note-----

For the first sample, it can be proven that the expected time before the game ends is $5$ seconds.

For the second sample, it can be proven that the expected time before the game ends is $\frac{28}{3}$ seconds.

Difficulty: interview

Starter code:

Solutions:
import sys
import math

Q = 998244353
n, m = list(map(int, sys.stdin.readline().strip().split()))

z = [1, 1]
f = [1, 1]
for i in range (0, n):
    f[0] = f[0] * (n - i) % Q
    f[1] = f[1] * (n + m - i) % Q
    z = [(z[0]*f[1]+z[1]*f[0]) % Q, (z[1]*f[1]) % Q]
ans = [z[0] * (m+1), z[1]]
for i in range (2, n + 1):
    ans = [(ans[0] * i * z[1] + ans[1] * m * z[0]) % Q, (ans[1] * i * z[1]) % Q]
y = ans[1]
ans = ans[0]
q = Q - 2
while q > 0:
    if q % 2 == 1:
        ans = (ans * y) % Q
    q = q // 2
    y = (y * y) % Q
print(ans)


nn = 2002002
P = 998244353
fa = [1] * (nn+1)
fainv = [1] * (nn+1)
for i in range(nn):
    fa[i+1] = fa[i] * (i+1) % P
fainv[-1] = pow(fa[-1], P-2, P)
for i in range(nn)[::-1]:
    fainv[i] = fainv[i+1] * (i+1) % P

N, M = list(map(int, input().split()))
invM1 = pow(M + 1, P - 2, P)
pre = 1
for i in range(2, N + 2):
    nu = ((M + i - 1) + (i - 1) * pre) * (M + 1) + M * (N - i + 1)
    de = invM1 * fainv[i-1] % P * fa[i-2] % P
    pre = nu * de % P
print(pre)


nn = 2002002;P = 998244353;fa = [1] * (nn+1);fainv = [1] * (nn+1)
for i in range(nn):fa[i+1] = fa[i] * (i+1) % P
fainv[-1] = pow(fa[-1], P-2, P)
for i in range(nn)[::-1]:fainv[i] = fainv[i+1] * (i+1) % P
N, M = map(int, input().split());invM1 = pow(M + 1, P - 2, P);pre = 1
for i in range(2, N + 2):nu = ((M + i - 1) + (i - 1) * pre) * (M + 1) + M * (N - i + 1);de = invM1 * fainv[i-1] % P * fa[i-2] % P;pre = nu * de % P
print(pre)