#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 4000005
const int mod=998244353;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
#define mp make_pair
#define pb push_back
#define ff first
#define ss second

int n,m;
int fac[maxn],inv[maxn];

inline int read(){
    int x=0,f=1; char ch=getchar();
    for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
    for (;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    return x*f;
}

int power(int a,int k){
	int ret=1;
	for (;k;k>>=1,a=1ll*a*a%mod) if (k&1) ret=1ll*ret*a%mod;
	return ret;
}

int C(int n,int m){return n<m?0:1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;}

int main(){
	n=read(),m=read(); int mx=n+n+m+m;
	fac[0]=inv[0]=1; for (int i=1;i<=mx;i++) fac[i]=1ll*fac[i-1]*i%mod;
	inv[mx]=power(fac[mx],mod-2); for (int i=mx-1;i;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod;
	int ans=0; int pps=m,ub=m;
	if (n<m) ub=n-((m-n)&1),pps+=(m-ub)>>1;
	for (int i=ub;i>=0;i-=2,++pps){
		int res=C(n,i),num=(C(pps+n-1,n-1)-1ll*(n-i)*C(pps-m+n-2,n-1)-1ll*i*C(pps-m+n-1,n-1))%mod;
		//		cout<<i<<' '<<res<<' '<<num<<' '<<pps<<' '<<C(pps+n-1,n-1)<<' '<<i<<' '<<C(pps-m+n,n-1)<<endl;
		ans=(ans+1ll*res*num)%mod;
	}
	ans=(ans+mod)%mod;
	printf("%d\n",ans);
    return 0;
}

### Prompt

In Cpp, your task is to solve 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<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 4000005
const int mod=998244353;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
#define mp make_pair
#define pb push_back
#define ff first
#define ss second

int n,m;
int fac[maxn],inv[maxn];

inline int read(){
    int x=0,f=1; char ch=getchar();
    for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
    for (;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    return x*f;
}

int power(int a,int k){
	int ret=1;
	for (;k;k>>=1,a=1ll*a*a%mod) if (k&1) ret=1ll*ret*a%mod;
	return ret;
}

int C(int n,int m){return n<m?0:1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;}

int main(){
	n=read(),m=read(); int mx=n+n+m+m;
	fac[0]=inv[0]=1; for (int i=1;i<=mx;i++) fac[i]=1ll*fac[i-1]*i%mod;
	inv[mx]=power(fac[mx],mod-2); for (int i=mx-1;i;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod;
	int ans=0; int pps=m,ub=m;
	if (n<m) ub=n-((m-n)&1),pps+=(m-ub)>>1;
	for (int i=ub;i>=0;i-=2,++pps){
		int res=C(n,i),num=(C(pps+n-1,n-1)-1ll*(n-i)*C(pps-m+n-2,n-1)-1ll*i*C(pps-m+n-1,n-1))%mod;
		//		cout<<i<<' '<<res<<' '<<num<<' '<<pps<<' '<<C(pps+n-1,n-1)<<' '<<i<<' '<<C(pps-m+n,n-1)<<endl;
		ans=(ans+1ll*res*num)%mod;
	}
	ans=(ans+mod)%mod;
	printf("%d\n",ans);
    return 0;
}

```