#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define E "\n"

using namespace std;
const long long MOD = 998244353;

int  N, M;
long long dat[2000009];

long long quickpow(long long b, long long e)
{
	return e ? ((e & 1 ? b : 1)*quickpow((b*b) % MOD, e >> 1)) % MOD : 1;
}

long long combi(int n, int m)
{
	long long retval = dat[n];
	retval = retval * quickpow(dat[n - m], MOD - 2);
	retval = retval % MOD;
	retval = retval * quickpow(dat[m], MOD - 2);
	retval = retval % MOD;
	return retval;
}

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> N >> M;
	dat[0] = 1;
	for (int i = 1; i < 2000009; i++) {
		dat[i] = dat[i - 1] * i;
		dat[i] = dat[i] % MOD;
	}
	int lb = min(N, M);
	long long ans = 0, tmp;
	for (int i = 0; i <= lb; i++) {
		if (3 * M - i >= 0 && (3 * M - i) % 2 == 0) {
			tmp = combi((3 * M - i) / 2 + N - 1, N - 1);
			tmp = tmp * combi(N, i);
			tmp = tmp % MOD;
			ans += tmp;
			ans = ans % MOD;
		}
	}
	tmp = combi(M + N - 1, N - 1);
	tmp = tmp + MOD - combi(M + N - 2, N - 2);
	tmp = tmp * N;
	tmp = tmp % MOD;
	ans = ans + MOD - tmp;
	ans = ans % MOD;
	cout << ans << E;
	//system("pause");
	return 0;
}
### Prompt

Develop a solution in Cpp to the problem described below:

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
#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define E "\n"

using namespace std;
const long long MOD = 998244353;

int  N, M;
long long dat[2000009];

long long quickpow(long long b, long long e)
{
	return e ? ((e & 1 ? b : 1)*quickpow((b*b) % MOD, e >> 1)) % MOD : 1;
}

long long combi(int n, int m)
{
	long long retval = dat[n];
	retval = retval * quickpow(dat[n - m], MOD - 2);
	retval = retval % MOD;
	retval = retval * quickpow(dat[m], MOD - 2);
	retval = retval % MOD;
	return retval;
}

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> N >> M;
	dat[0] = 1;
	for (int i = 1; i < 2000009; i++) {
		dat[i] = dat[i - 1] * i;
		dat[i] = dat[i] % MOD;
	}
	int lb = min(N, M);
	long long ans = 0, tmp;
	for (int i = 0; i <= lb; i++) {
		if (3 * M - i >= 0 && (3 * M - i) % 2 == 0) {
			tmp = combi((3 * M - i) / 2 + N - 1, N - 1);
			tmp = tmp * combi(N, i);
			tmp = tmp % MOD;
			ans += tmp;
			ans = ans % MOD;
		}
	}
	tmp = combi(M + N - 1, N - 1);
	tmp = tmp + MOD - combi(M + N - 2, N - 2);
	tmp = tmp * N;
	tmp = tmp % MOD;
	ans = ans + MOD - tmp;
	ans = ans % MOD;
	cout << ans << E;
	//system("pause");
	return 0;
}
```