#include<bits/stdc++.h>
using namespace std;

#define ll long long
const int mod=998244353,maxn=6000;
ll jie[maxn],ni[maxn];
ll sum[2050][2050],g[2050][2050];

ll pow_m(ll x,int k)
{
	ll ss=1;
	while(k){
		if(k&1)ss=ss*x%mod;
		x=x*x%mod; k>>=1;
	}
	return ss;
}

ll C(int m,int n)
{
//	if(m>n)cout<<"Nima"<<endl;
	return jie[n]*ni[m]%mod*ni[n-m]%mod;
}

ll solve(int n,int m,bool fl)
{
	for(int l=1;l<m;l++){
		sum[0][l]=1;
		for(int i=1;i<n;i++){
			sum[i][l]=(sum[i-1][l]+C(i,i+l-1))%mod;
//			cout<<i<<' '<<i+l-1<<' '<<C(i,i+l-1)<<endl;
		}
	}
	for(int l=1;l<m;l++){
		for(int d=1;d<n;d++){
			g[d][l]=C(l-1,n-d+l-1)*sum[d-1][l]%mod;
		}
	}
	
//	for(int l=1;l<m;l++){
//		for(int i=0;i<n;i++){
//			cout<<sum[i][l]<<' ';
//		}
//		cout<<endl;
//	}
//	for(int l=1;l<m;l++){
//		for(int i=1;i<n;i++){
//			cout<<g[i][l]<<' ';
//		}
//		cout<<endl;
//	}
	
	ll tmp=0,ans=0;
	if(fl){
		for(int l=1;l<m;l++){
			tmp=0;
			for(int i=n-1;i>0;i--){
				tmp=(tmp+g[n-i][m-l])%mod;
				ans=(ans+tmp*g[i][l]%mod)%mod;
			}
		}
	}
	else{
		for(int l=1;l<m;l++){
			tmp=0;
			for(int i=n-2;i>0;i--){
				tmp=(tmp+g[n-i-1][m-l])%mod;
				ans=(ans+tmp*g[i][l]%mod)%mod;
			}
		}
	}
	
//	for(int l=1;l<m;l++){
//		for(int i=n-2;i>0;i--){
//			tmp=(tmp+g[n-i-1][m-l])%mod;
//			ans=(ans+tmp*g[i][l]%mod)%mod;
//		}
//	}
//	
//	if(fl){
//		for(int l=1;l<m;l++){
//			for(int i=n-1;i>0;i--){
//				ans=(ans+g[i][l]*g[n-i][m-l]%mod)%mod;
//			}
//		}
//	}
	return ans%mod;
}

int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	int up=n+m;
	jie[0]=1; ni[0]=1;
	for(int i=1;i<=up;i++)jie[i]=jie[i-1]*i%mod;
	for(int i=1;i<=up;i++)ni[i]=pow_m(jie[i],mod-2);
	ll ans1=solve(n,m,1);
	ll ans2=solve(m,n,0);
//	cout<<ans1<<' '<<ans2<<endl;
	printf("%lld\n",(ans1+ans2)%mod*2%mod);
	return 0;
}