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

const int maxn=500005;
const int mo=998244353;

int n,m,N,M;
int fac[maxn],ifac[maxn],pw1[maxn],pw2[maxn];

inline int pow(int a,int b,int p){
	int ans=1;
	for(;b;b>>=1,a=1ll*a*a%p)
		if(b&1)ans=1ll*ans*a%p;
	return ans;
}

inline int C(int n,int m){
	if(n<m||m<0)return 0;
	return 1ll*fac[n]*ifac[m]%mo*ifac[n-m]%mo;
}

int main(){
	cin>>n>>m;
	N=min(n,m),M=max(n,m);
	fac[0]=ifac[0]=pw1[0]=pw2[0]=1;
	for(int i=1;i<=n;i++)pw1[i]=1ll*pw1[i-1]*(m+1)%mo;
	for(int i=1;i<=m;i++)pw2[i]=1ll*pw2[i-1]*(n+1)%mo;
	for(int i=1;i<=M;i++)fac[i]=1ll*fac[i-1]*i%mo;
	ifac[M]=pow(fac[M],mo-2,mo);
	for(int i=M-1;i;i--)ifac[i]=1ll*ifac[i+1]*(i+1)%mo;
	long long ans=0,w=1;
	for(int i=0;i<=N;i++,w=-w)
		ans+=w*C(n,i)*C(m,i)%mo*fac[i]%mo*pw1[n-i]%mo*pw2[m-i]%mo;
	cout<<(ans%mo+mo)%mo<<'\n';
	return 0;
}