#include<bits/stdc++.h>
#define maxn 500005
using namespace std;
const int mod = 998244353;
int n,m,ans,fac[maxn],inv[maxn];
int Pow(int a,int b){int s=1;for(;b;b>>=1,a=1ll*a*a%mod) b&1&&(s=1ll*s*a%mod);return s;}
int C(int n,int m){return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;}
int main()
{
	scanf("%d%d",&n,&m); if(n>m) swap(n,m);
	for(int i=fac[0]=inv[0]=1;i<=m;i++) fac[i]=1ll*fac[i-1]*i%mod;
	inv[m]=Pow(fac[m],mod-2);
	for(int i=m-1;i>=1;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod;
	for(int i=0;i<=n;i++) ans=(ans+(i&1?-1:1)*1ll*C(n,i)*C(m,i)%mod*fac[i]%mod*Pow(m+1,n-i)%mod*Pow(n+1,m-i))%mod;
	printf("%d\n",(ans+mod)%mod);
}