#include <iostream>
using namespace std;
typedef long long ll;
ll mod=998244353;

ll fac[3000010];
 
ll modinv(ll a){
    ll b=mod,u=1,v=0;
    while(b){
        ll t=a/b;
        a-=t*b; swap(a,b);
        u-=t*v; swap(u,v);
        }
        u%=mod;
        if(u<0) u+=mod;
    return u;
}
 
void modfac(){
    fac[0]=1;
    for(ll i=1;i<3000010;i++){
        fac[i]=(fac[i-1]*i)%mod;
    }
}
 
ll modperm(ll n,ll k){
    if(n<0||k<0||n<k) return 0;
    else return (fac[n]*modinv(fac[n-k]))%mod;
}
 
ll modcomb(ll n,ll k){
    if(n<0||k<0||n<k) return 0;
    else return ((fac[n]*modinv(fac[k]))%mod*modinv(fac[n-k]))%mod;
}

ll modhom(ll n,ll k){
  if(n==0&&k==0) return 1;
  else if(n<0||k<0) return 0;
  else return modcomb(n+k-1,k);
}
 
ll modpow(ll a,ll b){
  ll ans=1;
  a%=mod;
  while(b){
    if(b&1) ans=ans*a%mod;
    a=a*a%mod;
    b>>=1;
  }
  return ans;
}

int main(){
  modfac();
  ll n,m;
  cin >> n >> m;
  ll ans=modhom(n,3*m);
  for(ll i=0;i<m;i++){
    ans=(ans-n*modhom(n-1,i)%mod+mod)%mod;
  }
  for(ll i=m+1;i<=n;i++){
    if((3*m-i)%2==0){
      ans=(ans-modcomb(n,i)*modhom(n,(3*m-i)/2)%mod+mod)%mod;
    }
  }
  cout << ans << endl;
}
### Prompt

Your challenge is to write 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 <iostream>
using namespace std;
typedef long long ll;
ll mod=998244353;

ll fac[3000010];
 
ll modinv(ll a){
    ll b=mod,u=1,v=0;
    while(b){
        ll t=a/b;
        a-=t*b; swap(a,b);
        u-=t*v; swap(u,v);
        }
        u%=mod;
        if(u<0) u+=mod;
    return u;
}
 
void modfac(){
    fac[0]=1;
    for(ll i=1;i<3000010;i++){
        fac[i]=(fac[i-1]*i)%mod;
    }
}
 
ll modperm(ll n,ll k){
    if(n<0||k<0||n<k) return 0;
    else return (fac[n]*modinv(fac[n-k]))%mod;
}
 
ll modcomb(ll n,ll k){
    if(n<0||k<0||n<k) return 0;
    else return ((fac[n]*modinv(fac[k]))%mod*modinv(fac[n-k]))%mod;
}

ll modhom(ll n,ll k){
  if(n==0&&k==0) return 1;
  else if(n<0||k<0) return 0;
  else return modcomb(n+k-1,k);
}
 
ll modpow(ll a,ll b){
  ll ans=1;
  a%=mod;
  while(b){
    if(b&1) ans=ans*a%mod;
    a=a*a%mod;
    b>>=1;
  }
  return ans;
}

int main(){
  modfac();
  ll n,m;
  cin >> n >> m;
  ll ans=modhom(n,3*m);
  for(ll i=0;i<m;i++){
    ans=(ans-n*modhom(n-1,i)%mod+mod)%mod;
  }
  for(ll i=m+1;i<=n;i++){
    if((3*m-i)%2==0){
      ans=(ans-modcomb(n,i)*modhom(n,(3*m-i)/2)%mod+mod)%mod;
    }
  }
  cout << ans << endl;
}
```