#include<bits/stdc++.h>
#define Fail puts("NO"),exit(0);
#define eps 1e-10
#define maxn 500010
#define maxm 100010
#define inf 1000000007
#define mod 998244353
#define pi acos(-1)
#define mp(x,y) make_pair(x,y)
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int>pii;
typedef bitset<maxn> bit;
int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch-'0'<0||ch-'0'>9){if(ch=='-') f=-1;ch=getchar();}
    while(ch-'0'>=0&&ch-'0'<=9){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int n,m,mx,mn;
int ci_n[maxn],ci_m[maxn];
int fac[maxn],inv[maxn];
int quick_pow(int x,int p)
{
    int an=1,po=x;
    while(p)
    {
        if(p&1)  an=1ll*an*po%mod;
        po=1ll*po*po%mod;
        p>>=1;
    }
    return an;
}
int ans;
void add(int &x,int y)
{
    x=(x+y>=mod)?x+y-mod:x+y;
}
int C(int x,int y)
{
    return 1ll*fac[x]*inv[y]%mod*inv[x-y]%mod;
}
int main()
{
    n=read();m=read();mx=max(n,m);mn=min(n,m);
    fac[0]=1;
    for(int i=1;i<=mx;i++)  fac[i]=1ll*fac[i-1]*i%mod;
    inv[mx]=quick_pow(fac[mx],mod-2);
    for(int i=mx-1;i>=0;i--)  inv[i]=1ll*inv[i+1]*(i+1)%mod;
    ci_m[0]=ci_n[0]=1;
    for(int i=1;i<=n;i++)  ci_m[i]=1ll*ci_m[i-1]*(m+1)%mod;
    for(int i=1;i<=m;i++)  ci_n[i]=1ll*ci_n[i-1]*(n+1)%mod;
    for(int i=0;i<=mn;i++)
    {
        int tmp=1ll*C(n,i)*C(m,i)%mod*fac[i]%mod*ci_m[n-i]%mod*ci_n[m-i]%mod;
        add(ans,(i&1)?mod-tmp:tmp);
    }
    cout<<ans<<endl;
    return 0;
}