To AmShZ, all arrays are equal, but some arrays are more-equal than others. Specifically, the arrays consisting of n elements from 1 to n that can be turned into permutations of numbers from 1 to n by adding a non-negative integer to each element.

Mashtali who wants to appear in every problem statement thinks that an array b consisting of k elements is compatible with a more-equal array a consisting of n elements if for each 1 ≤ i ≤ k we have 1 ≤ b_i ≤ n and also a_{b_1} = a_{b_2} = … = a_{b_k}.

Find the number of pairs of arrays a and b such that a is a more-equal array consisting of n elements and b is an array compatible with a consisting of k elements modulo 998244353.

Note that the elements of b are not necessarily distinct, same holds for a.

Input

The first line of input contains two integers n and k (1 ≤ n ≤ 10^9 , 1 ≤ k ≤ 10^5).

Output

Print a single integer — the answer to the problem modulo 998244353.

Examples

Input


1 1


Output


1


Input


2 2


Output


8


Input


5 4


Output


50400


Input


20 100


Output


807645526


Input


10000000 10000


Output


883232350

Note

There are eight possible pairs for the second example: 

  1. a = \{1, 1\}, b = \{1, 1\} 
  2. a = \{1, 1\}, b = \{1, 2\} 
  3. a = \{1, 1\}, b = \{2, 1\} 
  4. a = \{1, 1\}, b = \{2, 2\} 
  5. a = \{1, 2\}, b = \{1, 1\} 
  6. a = \{1, 2\}, b = \{2, 2\} 
  7. a = \{2, 1\}, b = \{1, 1\} 
  8. a = \{2, 1\}, b = \{2, 2\} 
#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;
}