#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5 + 5, mod = 998244353, G = 3, Gi = 332748118;
int n, m, lim, L, r[N]; ll ans, A[N], B[N], fac[N], inv[N], C[N];
inline ll qpow(ll a, ll b) { ll ans = 1; for (; b; b >>= 1, a = a * a % mod) if (b & 1) ans = ans * a % mod; return ans; }
inline void NTT(ll *A, int type) { 
	for (int i = 0; i < lim; ++ i) if (i < r[i]) swap(A[i], A[r[i]]);
	for (int mid = 1; mid < lim; mid <<= 1) {
		ll Wn = qpow(type == 1 ? G : Gi, (mod - 1) / (mid << 1));
		for (int j = 0; j < lim; j += (mid << 1)) {
			ll w = 1;
			for (int k = 0; k < mid; ++ k, w = w * Wn % mod) {
				int x = A[j + k], y = w * A[j + k + mid] % mod;
				A[j + k] = (x + y) % mod, A[j + k + mid] = (x - y + mod) % mod;
			}
		}
	}
	if (type == 1) return ;
	ll invs = qpow(lim, mod - 2);
	for (int i = 0; i < lim; ++ i) A[i] = A[i] * invs % mod;
}
inline void calc_strling() {
	fac[0] = C[0] = 1;
	for (int i = 1; i <= m; ++ i) C[i] = C[i - 1] * qpow(i, mod - 2) % mod * (n - i + 1) % mod;
	for (int i = 1; i <= m; ++ i) fac[i] = fac[i - 1] * i % mod;
	inv[m] = qpow(fac[m], mod - 2);
	for (int i = m - 1; ~i; -- i) inv[i] = inv[i + 1] * (i + 1) % mod;
	for (int i = 0; i <= m; ++ i) {
		A[i] = i & 1 ? mod - inv[i] : inv[i];
		B[i] = qpow(i, m) * inv[i] % mod;
	}
	lim = 1, L = 0; while (lim <= m + m) lim <<= 1, ++ L;
	for (int i = 0; i < lim; ++ i) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (L - 1));
	NTT(A, 1), NTT(B, 1);
	for (int i = 0; i < lim; ++ i) A[i] = A[i] * B[i] % mod;
	NTT(A, -1);
}
int main() {
	scanf("%d%d", &n, &m);
	calc_strling();
	for (int i = 1; i <= min(n, m); ++ i)
		(ans += A[i] * fac[i] % mod * C[i] % mod * qpow(n + 1, n - i) % mod) %= mod;
	printf("%lld\n", ans);
	return 0;
}