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

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long hxtype;
template<class IT>inline void cmax(IT &a,IT b){if(a<b)a=b;}
template<class IT>inline void cmin(IT &a,IT b){if(b<a)a=b;}
const ll p=998244353ll,pp=p*p;
const int N=2500000;
ll fac[N+5],ifa[N+5];
inline ll expo(ll a,int b=998244351){
	ll c=1ll;
	while(b){
		if(b&1)c=c*a%p;
		b>>=1; a=a*a%p;
	}
	return c;
}
inline ll C(int a,int b){return fac[a]*(ifa[a-b]*ifa[b]%p)%p;}
inline ll f(int a,int b){return b?C(a+b-1,a):(!a);}
inline void app(ll &a){if(a> pp)a-=pp;}
inline void spp(ll &a){if(a<0ll)a+=pp;}
int main(){
	int n,m,i,t,b;ll ans;
	scanf("%d%d",&n,&m);t=m+(m<<1);
	fac[0]=1ll;
	for(i=1;i<=N;++i)fac[i  ]=fac[i-1]*i%p;
	ifa[N]=expo(fac[N]);
	for(i=N;i   ;--i)ifa[i-1]=ifa[i  ]*i%p;
	ans=f(t,n)-n*f(m-1,n);
	b=min(t,n);
//	printf("ans=%lld b=%d n=%d m=%d t=%d\n",ans,b,n,m,t);
/*	for(i=++m;i<=b;++i){
//		if((i^m)&1)printf("+%lld %lld %lld\n",C(i,m),C(n,i),f(t-i,n-i));
//		else       printf("-%lld %lld %lld\n",C(i,m),C(n,i),f(t-i,n-i));
		if((i^m)&1)app(ans+=(C(i-1,i-m)*C(n,i)%p)*f(t-i,n-i));
		else       spp(ans-=(C(i-1,i-m)*C(n,i)%p)*f(t-i,n-i));
	}*/
	for(i=m+2;i<=b;i+=2){
		spp(ans-=C(n,i)*f((t-i)>>1,n));
	}
	printf("%lld",(ans+pp)%p);
	return 0;
}