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;
int gi() {
	int res = 0, w = 1;
	char ch = getchar();
	while (ch != '-' && !isdigit(ch)) ch = getchar();
	if (ch == '-') w = -1, ch = getchar();
	while (isdigit(ch)) res = res * 10 + ch - '0', ch = getchar();
	return res * w;
}
const int Mod = 998244353;
int upd(int x) { return x + (x >> 31 & Mod); }
int fpow(int x, int y) {
	int res = 1;
	while (y) {
		if (y & 1) res = 1ll * res * x % Mod;
		x = 1ll * x * x % Mod, y >>= 1;
	}
	return res;
}
const int MAX_N = 1 << 18 | 10;
#define vi vector<int>
int Limit, rev[MAX_N], omg[MAX_N];
void FFT_prepare(int len) {
	int p = 0;
	for (Limit = 1; Limit <= len; Limit <<= 1) p++;
	for (int i = 0; i < Limit; i++) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (p - 1));
	static int L = 1;
	for (int &i = L; i < Limit; i <<= 1) {
		int w = fpow(3, Mod / 2 / i); omg[i] = 1;
		for (int j = 1; j < i; j++) omg[i + j] = 1ll * omg[i + j - 1] * w % Mod;
	}
}
void NTT(vi &p, int op) {
	p.resize(Limit);
	for (int i = 0; i < Limit; i++) if (i < rev[i]) swap(p[i], p[rev[i]]);
	for (int i = 1; i < Limit; i <<= 1)
		for (int j = 0; j < Limit; j += i << 1)
			for (int k = 0; k < i; k++) {
				int x = p[j + k], y = 1ll * p[i + j + k] * omg[i + k] % Mod;
				p[j + k] = upd(x + y - Mod), p[i + j + k] = upd(x - y);
			}
	if (op != 1) {
		reverse(p.begin() + 1, p.end());
		for (int i = 0, inv = fpow(Limit, Mod - 2); i < Limit; i++) p[i] = 1ll * p[i] * inv % Mod;
	}
}
int fac[MAX_N], ifc[MAX_N];
int C(int n, int m) {
	if (n < m || n < 0 || m < 0) return 0;
	else return 1ll * fac[n] * ifc[m] % Mod * ifc[n - m] % Mod;
}
int N = 1e5, K;
int main () {
#ifndef ONLINE_JUDGE
    freopen("cpp.in", "r", stdin);
#endif
	for (int i = fac[0] = 1; i <= N; i++) fac[i] = 1ll * fac[i - 1] * i % Mod;
	ifc[N] = fpow(fac[N], Mod - 2);
	for (int i = N - 1; ~i; i--) ifc[i] = 1ll * ifc[i + 1] * (i + 1) % Mod;
    cin >> N >> K;
	int ans = 0;
	vi F(K + 1), S(K + 1);
	for (int i = 0; i <= K; i++) F[i] = (i & 1) ? upd(-ifc[i]) : ifc[i];
	for (int i = 0; i <= K; i++) S[i] = 1ll * fpow(i, K) * ifc[i] % Mod;
	FFT_prepare(K << 1);
	NTT(F, 1), NTT(S, 1);
	for (int i = 0; i < Limit; i++) S[i] = 1ll * S[i] * F[i] % Mod;
	NTT(S, 0), S.resize(K + 1);
	int inv = fpow(1 + N, Mod - 2);
	for (int j = 0, coe = fpow(1 + N, N); j <= K; j++) {
		ans = (ans + 1ll * coe * S[j]) % Mod;
		coe = 1ll * coe * (N - j) % Mod * inv % Mod;
	}
	printf("%d\n", ans);
    return 0;
}