#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int P=998244353,maxn=(2e6)+5;
LL N,M,K,Fac[maxn],Inv[maxn],Ans;
LL Pow(LL a,LL b){LL s=1;for(LL w=a;b;b>>=1,w=w*w%P) if(b&1) s=s*w%P;return s;}
inline LL C(LL a,LL b){return Fac[a]*Inv[b]%P*Inv[a-b]%P;}
inline void Add(LL& x,LL y){if((x+=y)>=P) x-=P;}
inline void Dec(LL& x,LL y){if((x-=y)<0) x+=P;}
int main(){
	scanf("%d%d",&N,&M),K=N+(M<<1);
	Fac[0]=1;
	for(int i=1;i<=K;i++) Fac[i]=Fac[i-1]*i%P;
	Inv[K]=Pow(Fac[K],P-2);
	for(int i=K-1;~i;i--) Inv[i]=Inv[i+1]*(i+1)%P;
	for(int i=0,tp;i<=N&&i<=M;i++) if(!((tp=(M<<1)+M-i)&1)) Add(Ans,C(N,i)*C((tp>>1)+N-1,N-1)%P);
	LL O=0;
	for(int i=(M<<1)+1,ti=(M<<1)+M;i<=ti;i++) Add(O,C(ti-i+N-2,N-2)%P);
	Dec(Ans,N*O%P);
	printf("%lld\n",Ans);
    return 0;
}
### Prompt

In cpp, your task is to solve the following 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

### Response

```cpp
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int P=998244353,maxn=(2e6)+5;
LL N,M,K,Fac[maxn],Inv[maxn],Ans;
LL Pow(LL a,LL b){LL s=1;for(LL w=a;b;b>>=1,w=w*w%P) if(b&1) s=s*w%P;return s;}
inline LL C(LL a,LL b){return Fac[a]*Inv[b]%P*Inv[a-b]%P;}
inline void Add(LL& x,LL y){if((x+=y)>=P) x-=P;}
inline void Dec(LL& x,LL y){if((x-=y)<0) x+=P;}
int main(){
	scanf("%d%d",&N,&M),K=N+(M<<1);
	Fac[0]=1;
	for(int i=1;i<=K;i++) Fac[i]=Fac[i-1]*i%P;
	Inv[K]=Pow(Fac[K],P-2);
	for(int i=K-1;~i;i--) Inv[i]=Inv[i+1]*(i+1)%P;
	for(int i=0,tp;i<=N&&i<=M;i++) if(!((tp=(M<<1)+M-i)&1)) Add(Ans,C(N,i)*C((tp>>1)+N-1,N-1)%P);
	LL O=0;
	for(int i=(M<<1)+1,ti=(M<<1)+M;i<=ti;i++) Add(O,C(ti-i+N-2,N-2)%P);
	Dec(Ans,N*O%P);
	printf("%lld\n",Ans);
    return 0;
}
```