Problem: We have a sequence of N integers: x=(x_0,x_1,\cdots,x_{N-1}). Initially, x_i=0 for each i (0 \leq i \leq N-1).

Snuke will perform the following operation exactly M times:

* Choose two distinct indices i, j (0 \leq i,j \leq N-1,\ i \neq j). Then, replace x_i with x_i+2 and x_j with x_j+1.



Find the number of different sequences that can result after M operations. Since it can be enormous, compute the count modulo 998244353.

Constraints

* 2 \leq N \leq 10^6
* 1 \leq M \leq 5 \times 10^5
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N M


Output

Print the number of different sequences that can result after M operations, modulo 998244353.

Examples

Input

2 2


Output

3


Input

3 2


Output

19


Input

10 10


Output

211428932


Input

100000 50000


Output

3463133

Solution (in PYTHON3):

Solution:

"""
Writer: SPD_9X2
https://atcoder.jp/contests/agc036/tasks/agc036_c

可能性:
3MをN個に分割する分け方から、存在しない分け方を引く

存在しない分け方とは？
→奇数個だけ置かれている場所の数がM個より多い場合

k(M+1～N)までに関して、1をk箇所に分配し、その後2個ずつ好きな場所に分配する方法を数えればいい
→解けたかな？

→まだ駄目な条件が抜けてる
最大値が2Mより大きいならダメ
↑の部分で引いてないのは、奇数個置かれている場所はM個以下だが、最大値が2Mより大きい分け方…

(k個の1のおき方) * {(1の中から2Mを超えるように置く場所の選び方)*残りの2の分配法}
+ (k個の1のおき方) * {(0の中から2Mを超えるように置く場所の選び方)*残りの2の分配法}

をk(0以上M以下に関して求める)

→解けた！
"""

def modfac(n, MOD):
 
    f = 1
    factorials = [1]
    for m in range(1, n + 1):
        f *= m
        f %= MOD
        factorials.append(f)
    inv = pow(f, MOD - 2, MOD)
    invs = [1] * (n + 1)
    invs[n] = inv
    for m in range(n, 1, -1):
        inv *= m
        inv %= MOD
        invs[m - 1] = inv
    return factorials, invs


def modnCr(n,r,mod,fac,inv): #上で求めたfacとinvsを引数に入れるべし(上の関数で与えたnが計算できる最大のnになる)
    if n < r:
        return 0
    return fac[n] * inv[n-r] * inv[r] % mod

mod = 998244353
N,M = map(int,input().split())

fac,inv = modfac(N+3*M+10,mod)

ans = modnCr(3*M+N-1,N-1,mod,fac,inv)
#print (3*M+N-1,N-1,ans)

for k in range(M+1,N+1):

    #print (k,ans)

    if (3*M-k) % 2 == 0:
        ans -= modnCr(N,k,mod,fac,inv) * modnCr((3*M-k)//2 + N-1 , N-1 , mod,fac,inv)
        ans %= mod

for k in range(M+1):

    if (3*M-k) % 2 == 0:
        
        amari = (3*M - (k+2*M))//2

        now = modnCr(N,k,mod,fac,inv) * k * modnCr(amari+N-1,N-1, mod,fac,inv)

        amari -= 1
        now +=modnCr(N,k,mod,fac,inv)*(N-k)*modnCr(amari+N-1,N-1, mod,fac,inv)

        ans -= now
        ans %= mod

    #print (ans)

print (ans)