#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<string>
#include<queue>
#include<stack>
using namespace std;
#define MOD 998244353
#define INF (1<<29)
#define LINF (1LL<<60)
#define EPS (1e-10)
typedef long long Int;
typedef pair<Int, Int> P;

Int n, m;
Int res;

Int mod_pow(Int x, Int a, Int m = MOD){
    if(a == 0)return 1;
    Int res = mod_pow(x, a / 2, m);
    res = res * res % m;
    if(a % 2)res *= x;
    return res % m;
}

Int inv(Int x, Int m = MOD){
    return mod_pow(x, m-2, m);
}

Int fact[1080000];
Int revfact[1080000];
Int rev[1080000];

void init(){
    Int m = MOD;
    fact[0] = 1;
    revfact[0] = 1;
    rev[0] = 0;
    rev[1] = 1;
    for(int i = 1;i < 1080000;i++){
        fact[i] = fact[i-1] * i % m;
        if(i>1)rev[i] = m / i * (m-rev[m % i]) % m;
        revfact[i] = revfact[i-1] * rev[i] % m;
    }
}

Int nCk(Int n, Int k){
    if(n < k)return 0;
    return fact[n] * revfact[n-k] % MOD * revfact[k] % MOD;
}



int main(){
    init();
    cin >> n >> m;
    res = mod_pow(m+1,n) * mod_pow(n+1,m) % MOD;
    for(int i = 1;i <= n;i++){
        Int tmp = nCk(n, i) * nCk(m, i) % MOD *fact[i] % MOD * mod_pow(m+1,n-i) % MOD * mod_pow(n+1, m-i) % MOD;
        if(i % 2)res -= tmp;
        else res += tmp;
        res %= MOD;
    }
    if(res < 0)res += MOD;
    cout << res << endl;
    return 0;
}