#include<cctype>
#include<cstdio>
using namespace std;
inline int readint(){
	int x=0;
	bool f=0;
	char c=getchar();
	while(!isdigit(c)&&c!='-') c=getchar();
	if(c=='-'){
		f=1;
		c=getchar();
	}
	while(isdigit(c)){
		x=x*10+c-'0';
		c=getchar();
	}
	return f?-x:x;
}
const int maxn=5e5+5;
int n,m;
typedef long long ll;
const ll mod=998244353;
ll inv[maxn],cn[maxn],cm[maxn],pown[maxn],powm[maxn],fac[maxn];
int main(){
	#ifdef LOCAL
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
	#endif
	n=readint();
	m=readint();
	inv[1]=1;
	for(int i=2;i<=n||i<=m;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
	cn[0]=1;
	for(int i=1;i<=n;i++) cn[i]=cn[i-1]*(n-i+1)%mod*inv[i]%mod;
	cm[0]=1;
	for(int i=1;i<=m;i++) cm[i]=cm[i-1]*(m-i+1)%mod*inv[i]%mod;
	pown[0]=1;
	for(int i=1;i<=m;i++) pown[i]=pown[i-1]*(n+1)%mod;
	powm[0]=1;
	for(int i=1;i<=n;i++) powm[i]=powm[i-1]*(m+1)%mod;
	fac[0]=1;
	for(int i=1;i<=n&&i<=m;i++) fac[i]=fac[i-1]*i%mod;
	ll ans=0;
	for(int i=0;i<=n&&i<=m;i++){
		ll res=cn[i]*cm[i]%mod*fac[i]%mod*pown[m-i]%mod*powm[n-i]%mod;
		if(i%2==0) ans=(ans+res)%mod;
		else ans=(ans+mod-res)%mod;
	}
	printf("%d\n",(int)ans);
	return 0;
}