#include<bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);i++)
#define REP(i,n) for(int i=1;i<=(n);i++)
#define mp make_pair
#define pb push_back
#define fst first
#define snd second
typedef long long ll;
typedef pair<int,int> pii;

const int maxn=5000005;
const int mod=998244353;
int n,m;
int fac[maxn],ifac[maxn];

int C(int a,int b){
	if(a<b||a<0||b<0)return 0;
	return 1LL*fac[a]*ifac[b]%mod*ifac[a-b]%mod;
}

int main(){
	scanf("%d%d",&n,&m);
	fac[0]=fac[1]=ifac[0]=ifac[1]=1;
	for(int i=2;i<=3*m+n;i++){
		fac[i]=1LL*fac[i-1]*i%mod;
		ifac[i]=1LL*ifac[mod%i]*(mod-mod/i)%mod;
	}
	REP(i,3*m+n)ifac[i]=1LL*ifac[i-1]*ifac[i]%mod;
	int ans=0;
	rep(i,min(n,m)+1){
		if((3*m-i)&1)continue;
		int cur=(3*m-i)/2;
		int tmp=(C(cur+n-1,n-1)-1LL*i*C(cur-m+n-1,n-1)%mod+mod-1LL*(n-i)*C(cur-(m+1)+n-1,n-1)%mod+mod)%mod;
		ans=(ans+1LL*C(n,i)*tmp%mod)%mod;
	}
	printf("%d\n",ans);
	return 0;
}
### Prompt

Generate a CPP solution to 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>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);i++)
#define REP(i,n) for(int i=1;i<=(n);i++)
#define mp make_pair
#define pb push_back
#define fst first
#define snd second
typedef long long ll;
typedef pair<int,int> pii;

const int maxn=5000005;
const int mod=998244353;
int n,m;
int fac[maxn],ifac[maxn];

int C(int a,int b){
	if(a<b||a<0||b<0)return 0;
	return 1LL*fac[a]*ifac[b]%mod*ifac[a-b]%mod;
}

int main(){
	scanf("%d%d",&n,&m);
	fac[0]=fac[1]=ifac[0]=ifac[1]=1;
	for(int i=2;i<=3*m+n;i++){
		fac[i]=1LL*fac[i-1]*i%mod;
		ifac[i]=1LL*ifac[mod%i]*(mod-mod/i)%mod;
	}
	REP(i,3*m+n)ifac[i]=1LL*ifac[i-1]*ifac[i]%mod;
	int ans=0;
	rep(i,min(n,m)+1){
		if((3*m-i)&1)continue;
		int cur=(3*m-i)/2;
		int tmp=(C(cur+n-1,n-1)-1LL*i*C(cur-m+n-1,n-1)%mod+mod-1LL*(n-i)*C(cur-(m+1)+n-1,n-1)%mod+mod)%mod;
		ans=(ans+1LL*C(n,i)*tmp%mod)%mod;
	}
	printf("%d\n",ans);
	return 0;
}
```