#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;
}