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>
#define ll long long
#define f(i, a, b) for(ll i = a; i <= b; ++i)
#define ff(i, a, b) for(ll i = a; i < b; ++i)
#define F(i, a, b) for(ll i = a; i >= b; --i)
#define FF(i, a, b) for(ll i = a; i > b; --i)
#define x first
#define y second
#define X real()
#define Y imag()
using namespace std;
typedef complex<ll> P;
typedef pair<ll, ll> ii;
typedef tuple<ll, ll, ll> iii;

const ll N = 3e6+7;
const ll mod = 998244353;
ll n, m, ans = 0, f[N], rev[N];

ll binpow(ll a, ll b){
	if(!b) return 1;
	if(b == 1) return a%mod;
	ll temp = binpow(a, b/2);
	if(b%2 == 0) return (temp*temp)%mod;
	else return (temp*((temp*a)%mod))%mod;
}

void init(ll n){
	f[0] = 1;
	f(i,0,n){
		if(i) f[i] = (f[i-1]*i)%mod;
		rev[i] = binpow(f[i], mod-2);
	}
}

ll Ckn(ll k, ll n){
	return (f[n]*((rev[n-k] * rev[k])%mod))%mod;
}

ll calc(ll a, ll b, ll c){
	ll result = 0, now = min(a, min(b, c));
	f(i,0,now){
		if((b-i)%2 != 0) continue;
		result += (Ckn(i, a)*Ckn(a-1, (b-i)/2 + a-1))%mod;
		result %= mod;
	}
	return result;
}

signed main(){
//	freopen("PERFECT1.inp","r",stdin);
//	freopen("PERFECT1.out","w",stdout);
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	cin >> n >> m;
	init(3*max(n, m)*1LL);
	ans = (calc(n, 3*m, m) - n*((calc(n, m, m) - calc(n-1, m, m) + mod)%mod) + mod)%mod;
	ans = (ans+mod)%mod;
	cout << ans;
}