#include <bits/stdc++.h>
using namespace std;
#define fore(i, a, b) for(int i = a; i <= b; i++)
#define Fore(i, a, b) for(int i = a; i < b; i++)
#define pii pair<int, int>
#define fi first
#define se second
#define MP make_pair
#define EP emplace_back
#define li long long

const int MAXN = 2100, mod = 998244353;

inline int input(){
    char c = getchar(); int o; bool f = 0;
    while(c > 57 || c < 48)
        f |= (c == '-'), c = getchar();
    for(o = 0; c > 47 && c < 58; c = getchar())
        o = (o << 1)+(o << 3)+(c - 48);
    return f ? -o : o;
}

li C[MAXN * 2][MAXN * 2];

int main(){
    int n = input(), m = input();
    li ans = 0;
    C[0][0] = 1;
    fore(i, 1, n + m){
        C[i][0] = 1;
        fore(j, 1, i)
            C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;
            // cout << C[i][j] << " \n"[j == i];
    }
    Fore(r, 1, n){
        li F = 0;
        for(int c = m - 1; c >= 1; c--){
            F = (F + C[n - r + m - c - 1][n - r] * C[n - r - 1 + c][n - r - 1] % mod) % mod;
            ans = (ans + F * (C[r + c - 1][r] * C[r + m - c - 1][r - 1] % mod) % mod) % mod;
        }
    }
    swap(n, m);
    Fore(r, 1, n){
        li F = 0;
        for(int c = m - 1; c >= 1; c--){
            ans = (ans + F * (C[r + c - 1][r] * C[r + m - c - 1][r - 1] % mod) % mod) % mod;
            F = (F + C[n - r + m - c - 1][n - r] * C[n - r - 1 + c][n - r - 1] % mod) % mod;
        }
    }
    printf("%lld", (ans << 1) % mod);
}