#include <bits/stdc++.h>
#define pb push_back
#define int long long
#define mp make_pair
#define inf 998244353
#define LINF 1000000000000000007LL
#define ll long long
using namespace std;
int ka[2145140],inv[2145140];
void setkaijo(int n){
	ka[0]=1;
	for(int i=1;i<=n;i++){
		ka[i] = ka[i-1] * i;
		ka[i] %= inf;
	}
}
int modpow(int x,int k){
	// x ^ k mod inf
	int p2[55],res=1;
	p2[0]=1;p2[1]=x%inf;
	for(int i=2;i<=50;i++){
		p2[i]=p2[i-1]*p2[i-1];
		p2[i] %= inf;
	}
	for(int i=1;i<=50;i++){
		if(k%2==1){
			res *= p2[i];
			res %= inf;
		}
		k /= 2;
	}
	return res;
}
void setinv(int n){
	for(int i=0;i<=n;i++){
		inv[i] = modpow(ka[i],(ll)inf-2);
	}
}
int comb(int n,int k){
	if( k<0 || n<0 || k>n)return 0;
	if(k==0 || k==n)return 1;
	int res = (ka[n] * inv[k]) % inf;
	res = (res*inv[n-k]) % inf;
	return res;
}
signed main(){
	int n,m;
	cin>>n>>m;
	setkaijo(2000000);
	setinv(2000000);
	int ans = 0, sub = 0;
	for(int i=0; i<=m ; i++){
		if( i <= n && ( 3*m-i ) % 2 == 0 ){
			int tmp = 1;
			int tms = ( 3 * m - i ) / 2;
			tmp = comb( tms + n - 1, tms );
			tmp *= comb( n, i );
			tmp %= inf;
			ans += tmp;
			ans %= inf;
		}
	}
	for(int i=2*m+1;i<=3*m;i++){
		int amari = 3*m-i;
		int tmp = n;
		tmp *= comb( amari + n - 2, amari );
		tmp %= inf;
		sub += tmp;
		sub %= inf;
	}
	int res = ( ans + inf - sub ) % inf;
	cout<<res<<endl;
	return 0;
}
### Prompt

Your task is to create 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>
#define pb push_back
#define int long long
#define mp make_pair
#define inf 998244353
#define LINF 1000000000000000007LL
#define ll long long
using namespace std;
int ka[2145140],inv[2145140];
void setkaijo(int n){
	ka[0]=1;
	for(int i=1;i<=n;i++){
		ka[i] = ka[i-1] * i;
		ka[i] %= inf;
	}
}
int modpow(int x,int k){
	// x ^ k mod inf
	int p2[55],res=1;
	p2[0]=1;p2[1]=x%inf;
	for(int i=2;i<=50;i++){
		p2[i]=p2[i-1]*p2[i-1];
		p2[i] %= inf;
	}
	for(int i=1;i<=50;i++){
		if(k%2==1){
			res *= p2[i];
			res %= inf;
		}
		k /= 2;
	}
	return res;
}
void setinv(int n){
	for(int i=0;i<=n;i++){
		inv[i] = modpow(ka[i],(ll)inf-2);
	}
}
int comb(int n,int k){
	if( k<0 || n<0 || k>n)return 0;
	if(k==0 || k==n)return 1;
	int res = (ka[n] * inv[k]) % inf;
	res = (res*inv[n-k]) % inf;
	return res;
}
signed main(){
	int n,m;
	cin>>n>>m;
	setkaijo(2000000);
	setinv(2000000);
	int ans = 0, sub = 0;
	for(int i=0; i<=m ; i++){
		if( i <= n && ( 3*m-i ) % 2 == 0 ){
			int tmp = 1;
			int tms = ( 3 * m - i ) / 2;
			tmp = comb( tms + n - 1, tms );
			tmp *= comb( n, i );
			tmp %= inf;
			ans += tmp;
			ans %= inf;
		}
	}
	for(int i=2*m+1;i<=3*m;i++){
		int amari = 3*m-i;
		int tmp = n;
		tmp *= comb( amari + n - 2, amari );
		tmp %= inf;
		sub += tmp;
		sub %= inf;
	}
	int res = ( ans + inf - sub ) % inf;
	cout<<res<<endl;
	return 0;
}
```