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;
#define ll long long
const int mod = 998244353;
const int inv3 = (mod + 1) / 3;
inline int add(int x, int y) {
	x += y;
	return x >= mod ? x - mod : x;
}
inline int sub(int x, int y) {
	x -= y;
	return x < 0 ? x + mod : x;
}
inline int mul(int x, int y) {
	return 1ll * x * y % mod;
}
int quick_pow(int x, int y) {
	int res = 1;
	while(y) {
		if(y & 1) res = mul(res, x);
		x = mul(x, x), y >>= 1;
	}
	return res;
}
inline int getinv(int x) {
	return quick_pow(x, mod - 2);
}
const int maxn = 1 << 17;
void ntt(int *A, int N, int opt) {
	static int owo[maxn];
	for(int i = 0, j = 0; i < N; i++) {
		if(i < j) swap(A[i], A[j]);
		for(int l = (N >> 1); (j ^= l) < l; l >>= 1);
	}
	owo[0] = 1;
	for(int l = 2; l <= N; l <<= 1) {
		int m = (l >> 1);
		int w = quick_pow((opt == 1) ? 3 : inv3, (mod - 1) / l);
		for(int j = 1; j < m; j++) owo[j] = mul(owo[j - 1], w);
		for(int j = 0; j < N; j += l)
			for(int i = j; i < j + m; i++) {
				int v = mul(A[i + m], owo[i - j]);
				A[i + m] = sub(A[i], v);
				A[i] = add(A[i], v);
			}
	}
	if(opt == -1) {
		int tmp = getinv(N);
		for(int i = 0; i < N; i++) A[i] = mul(A[i], tmp);
	}
}
int n, K;
int fac[maxn], ifac[maxn];
void init_fac(int N) {
	fac[0] = 1;
	for(int i = 1; i <= N; i++) fac[i] = mul(fac[i - 1], i);
	ifac[N] = getinv(fac[N]);
	for(int i = N; i >= 1; i--) ifac[i - 1] = mul(ifac[i], i);
}
int A[maxn << 1], B[maxn << 1];
int main() {
	scanf("%d%d", &n, &K), init_fac(K);
	for(int i = 0; i <= K; i++) 
		A[i] = (i & 1) ? mod - ifac[i] : ifac[i];
	for(int i = 1; i <= K; i++)
		B[i] = mul(quick_pow(i, K), ifac[i]);
	int N = 1;
	while(N <= K * 2) N <<= 1;
	ntt(A, N, 1), ntt(B, N, 1);
	for(int i = 0; i < N; i++) 
		A[i] = mul(A[i], B[i]);
	ntt(A, N, -1);
	int ans = 0;
	for(int i = 1, j = n; i <= min(n, K); i++, j = mul(j, n - i + 1)) 
		ans = add(ans, mul(mul(A[i], j), quick_pow(n + 1, n - i)));
	cout << ans << endl;	
	return 0;
}