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

const int N=1000005,P=998244353;
int n,m,fac[2*N],ifac[2*N];

int power(int a,int x){
	int ans=1;
	for(;x;x>>=1,a=1LL*a*a%P)if(x&1)ans=1LL*ans*a%P;
	return ans;
}
int binom(int n,int m){
	return n<m||m<0?0:1LL*fac[n]*ifac[m]%P*ifac[n-m]%P;
}

int main(){
	scanf("%d%d",&n,&m);
	int lim=3*m/2+n;
	for(int i=fac[0]=1;i<=lim;++i)fac[i]=1LL*fac[i-1]*i%P;
	ifac[lim]=power(fac[lim],P-2);
	for(int i=lim;i;--i)ifac[i-1]=1LL*ifac[i]*i%P;
	int ans=0;
	for(int i=m&1;i<=n&&i<=m;i+=2){
		int s=(3*m+2*n-i)/2;
		for(int a=0;a<=min(1,i)&&a*m<=s-n;++a)
			for(int b=0;b<=min(n-1,1)&&a*m+b*(m+1)<=s-n;++b)
				ans=(ans+((a^b)&1?-1LL:1LL)*binom(n,i)%P*binom(i,a)%P*binom(n-i,b)%P*binom(s-a*m-b*(m+1)-1,n-1))%P;
	}
	printf("%d\n",(ans+P)%P);
}

### 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;

const int N=1000005,P=998244353;
int n,m,fac[2*N],ifac[2*N];

int power(int a,int x){
	int ans=1;
	for(;x;x>>=1,a=1LL*a*a%P)if(x&1)ans=1LL*ans*a%P;
	return ans;
}
int binom(int n,int m){
	return n<m||m<0?0:1LL*fac[n]*ifac[m]%P*ifac[n-m]%P;
}

int main(){
	scanf("%d%d",&n,&m);
	int lim=3*m/2+n;
	for(int i=fac[0]=1;i<=lim;++i)fac[i]=1LL*fac[i-1]*i%P;
	ifac[lim]=power(fac[lim],P-2);
	for(int i=lim;i;--i)ifac[i-1]=1LL*ifac[i]*i%P;
	int ans=0;
	for(int i=m&1;i<=n&&i<=m;i+=2){
		int s=(3*m+2*n-i)/2;
		for(int a=0;a<=min(1,i)&&a*m<=s-n;++a)
			for(int b=0;b<=min(n-1,1)&&a*m+b*(m+1)<=s-n;++b)
				ans=(ans+((a^b)&1?-1LL:1LL)*binom(n,i)%P*binom(i,a)%P*binom(n-i,b)%P*binom(s-a*m-b*(m+1)-1,n-1))%P;
	}
	printf("%d\n",(ans+P)%P);
}

```