#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MAX_N = 1e6 + 10;
const ll MOD = 998244353;

ll sq(ll x) { return x * x % MOD; }
ll qpow(ll a, ll b) { return b ? sq(qpow(a, b / 2)) * (b & 1 ? a : 1) % MOD : 1; }
ll inv(ll x) { return qpow(x, MOD - 2); }

int N, M;
ll fac[MAX_N], ifac[MAX_N], pow_n1[MAX_N], pow_m1[MAX_N];

ll comb(int n, int m) { return fac[n] * ifac[n - m] % MOD * ifac[m] % MOD; }

int main() {
    scanf("%d%d", &N, &M);
    fac[0] = 1;
    for (int i = 1; i <= N + M; i++) fac[i] = fac[i - 1] * i % MOD;
    ifac[N + M] = inv(fac[N + M]);
    for (int i = N + M; i; i--) ifac[i - 1] = ifac[i] * i % MOD;
    pow_n1[0] = pow_m1[0] = 1;
    for (int i = 1; i <= N + M; i++) {
        pow_n1[i] = pow_n1[i - 1] * (N + 1) % MOD;
        pow_m1[i] = pow_m1[i - 1] * (M + 1) % MOD;
    }
    ll ans = 0;
    for (int i = 0; i <= min(N, M); i++) {
        ll t = i & 1 ? MOD - 1 : 1;
        (t *= comb(N, i) * comb(M, i) % MOD) %= MOD;
        (t *= fac[i]) %= MOD;
        (t *= pow_n1[M - i] * pow_m1[N - i] % MOD) %= MOD;
        (ans += t) %= MOD;
    }
    printf("%lld\n", ans);
}
