#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
template <class T>
inline void rd(T &x) {
	x=0; char c=getchar(); int f=1;
	while(!isdigit(c)) { if(c=='-') f=-1; c=getchar(); }
	while(isdigit(c)) x=x*10-'0'+c,c=getchar(); x*=f;
}
const int mod=998244353;
const int N=3e6+10;
int Pow(int x,int y) {
	int res=1;
	while(y) {
		if(y&1) res=res*(ll)x%mod;
		x=x*(ll)x%mod,y>>=1;
	}
	return res;
}
int fac[N],inv[N];
int C(int n,int m) { return fac[n]*(ll)inv[m]%mod*inv[n-m]%mod; }
void predo(int n) {
	fac[0]=1; for(int i=1;i<=n;++i) fac[i]=fac[i-1]*(ll)i%mod;
	inv[n]=Pow(fac[n],mod-2); for(int i=n;i>=1;--i) inv[i-1]=inv[i]*(ll)i%mod; 
}
int cal(int n,int m,int x) {
	int ans=0;
	for(int i=m&1;i<=x&&i<=n;i+=2)
		ans=(ans+C(n,i)*(ll)C((m-i)/2+n-1,n-1))%mod;
	return ans;
}
int n,m;
int main() {
	predo(3e6);
	rd(n),rd(m);
	int ans1=cal(n,3*m,m);
	int ans2=n*(ll)cal(n,m-1,m)%mod;
	printf("%d\n",(ans1-ans2+mod)%mod);
	return 0;
}