#include<bits/stdc++.h>

using namespace std;

typedef long long LL;
#define N 6000000

const LL mod=998244353;
LL n,m,p,fac[N],ifac[N],ans;

void upd(LL &x,LL y){
	x=(x+y%mod+mod)%mod;
}

LL inv(LL x){
	return x==1?1:(mod-mod/x)*inv(mod%x)%mod;
}

LL C(LL x,LL y){
	return x<y||y<0?0:fac[x]*ifac[y]%mod*ifac[x-y]%mod;
}

int main(){
	scanf("%lld%lld",&n,&m);
	p=(n+m)*3;
	fac[0]=1; for (LL i=1;i<=p;++i) fac[i]=fac[i-1]*i%mod;
	ifac[p]=inv(fac[p]); for (LL i=p-1;~i;--i) ifac[i]=ifac[i+1]*(i+1)%mod;
	for (LL i=m&1;i<=m;i+=2){
		LL p=(m*3-i)/2,sum=0;
		upd(sum,C(p+n-1,n-1));
		upd(sum,-i*C(p-m+n-1,n-1));
		upd(sum,-(n-i)*C(p-(m+1)+n-1,n-1));
		upd(ans,sum*C(n,i));
	}
	printf("%lld\n",ans);
	
	return 0;
}
			
### Prompt

Please create a solution in Cpp 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;

typedef long long LL;
#define N 6000000

const LL mod=998244353;
LL n,m,p,fac[N],ifac[N],ans;

void upd(LL &x,LL y){
	x=(x+y%mod+mod)%mod;
}

LL inv(LL x){
	return x==1?1:(mod-mod/x)*inv(mod%x)%mod;
}

LL C(LL x,LL y){
	return x<y||y<0?0:fac[x]*ifac[y]%mod*ifac[x-y]%mod;
}

int main(){
	scanf("%lld%lld",&n,&m);
	p=(n+m)*3;
	fac[0]=1; for (LL i=1;i<=p;++i) fac[i]=fac[i-1]*i%mod;
	ifac[p]=inv(fac[p]); for (LL i=p-1;~i;--i) ifac[i]=ifac[i+1]*(i+1)%mod;
	for (LL i=m&1;i<=m;i+=2){
		LL p=(m*3-i)/2,sum=0;
		upd(sum,C(p+n-1,n-1));
		upd(sum,-i*C(p-m+n-1,n-1));
		upd(sum,-(n-i)*C(p-(m+1)+n-1,n-1));
		upd(ans,sum*C(n,i));
	}
	printf("%lld\n",ans);
	
	return 0;
}
			
```