#include<bits/stdc++.h>
#define fo(i,a,b)for(int i=a,_e=b;i<=_e;++i)
#define fd(i,a,b)for(int i=b,_e=a;i>=_e;--i)
#define ll long long
using namespace std;
const int N=5e5+5,mo=998244353;
int n,m,ans,nn;
int jc[N],ny[N],_n[N],_m[N];
int ksm(int x,int y){
	int t=1;
	for(;y;y>>=1,x=(ll)x*x%mo)if(y&1)t=(ll)t*x%mo;
	return t;
}
int main(){
	cin>>n>>m;nn=max(n,m);
	jc[0]=_n[0]=_m[0]=1;
	fo(i,1,nn)jc[i]=(ll)jc[i-1]*i%mo,_n[i]=(ll)_n[i-1]*(n+1)%mo,_m[i]=(ll)_m[i-1]*(m+1)%mo;
	ny[nn]=ksm(jc[nn],mo-2);
	fd(i,0,nn-1)ny[i]=(ll)ny[i+1]*(i+1)%mo;
	fo(i,0,min(n,m))
		ans=((ll)(i&1?-1:1)*jc[n]*jc[m]%mo*ny[n-i]%mo*ny[m-i]%mo*ny[i]%mo*_n[m-i]%mo*_m[n-i]+ans)%mo;
	cout<<(ans+mo)%mo;
}