/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
const int MAXN = 400, MOD = 998244353;
int n, m, bino[MAXN + 5][MAXN + 5], f[MAXN + 5][MAXN + 5];
inline int mul(const int u, const int v) { return 1ll * u * v % MOD; }
inline void subeq(int& u, const int v) { (u -= v) < 0 && (u += MOD); }
inline int sub(int u, const int v) { return (u -= v) < 0 ? u + MOD : u; }
inline void addeq(int& u, const int v) { (u += v) >= MOD && (u -= MOD); }
inline int add(int u, const int v) { return (u += v) < MOD ? u : u - MOD; }
inline int mpow(int u, int v) {
int ret = 1;
for (; v; u = mul(u, u), v >>= 1) ret = mul(ret, v & 1 ? u : 1);
return ret;
}
inline void init() {
rep (i, 0, MAXN) {
bino[i][0] = 1;
rep (j, 1, i) bino[i][j] = add(bino[i - 1][j - 1], bino[i - 1][j]);
}
}
int main() {
init();
scanf("%d %d", &n, &m);
int ans = 1;
std::fill_n(f[0], m + 1, 1);
rep (i, 1, n) {
rep (j, 0, m) f[j][j] = 0;
rep (l, 0, m) rep (r, l + 1, m) addeq(f[l + 1][r], f[l][r]);
rep (l, 0, m) rep (r, l, m - 1) addeq(f[l][r + 1], f[l][r]);
rep (j, 1, m) addeq(ans, mul(mul(bino[n][i], bino[m][j]), f[j][j]));
}
printf("%d\n", ans);
return 0;
}