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 std::cin;
using std::cout;
 
typedef unsigned long long u64;
const int N = 100054, mod = 998244353;
 
int n, L;
int fact[N], finv[N];
int pn = 0, c[N], p[9600], pwn[N];
 
inline void reduce(int &x) {x += x >> 31 & mod;}
u64 PowerMod(u64 a, int n, u64 c = 1) {for (; n; n >>= 1, a = a * a % mod) if (n & 1) c = c * a % mod; return c;}
 
void init(int n) {
	int i;
	for (*fact = i = 1; i <= n; ++i) fact[i] = (u64)fact[i - 1] * i % mod;
	finv[n] = PowerMod(fact[n], mod - 2);
	for (i = n; i; --i) finv[i - 1] = (u64)finv[i] * i % mod;
}
 
void sieve(int n) {
	int i, j, v; pwn[1] = 1;
	memset(c, -1, sizeof c);
	for (i = 2; i <= n; ++i) {
		if (!~c[i]) p[pn] = i, c[i] = pn++, pwn[i] = PowerMod(i, n);
		for (j = 0; (v = i * p[j]) <= n && j <= c[i]; ++j) c[v] = j, pwn[v] = (u64)pwn[i] * pwn[p[j]] % mod;
	}
}
 
int main() {
	int i, s = 1, t = 0, ans = 0;
	std::ios::sync_with_stdio(false), cin.tie(nullptr);
	cin >> L >> n, init(n), sieve(n);
	if (L <= n) {
		for (i = L; i >= 0; --i, s = (u64)s * L % mod) ans = (ans + (u64)finv[i] * finv[L - i] % mod * pwn[i] % mod * s) % mod;
		ans = (u64)fact[L] % mod * ans % mod;
	} else {
		for (i = n; i >= 0; --i)
			t = (L * u64(i + 1) % mod * t + (u64)s * finv[i] % mod * finv[n - i]) % mod,
			s = s * u64(mod - L % mod + i) % mod, ans = (ans * u64(L - i) + (u64)t * pwn[i]) % mod;
		ans = PowerMod(L + 1, L - n, ans);
	}
	cout << ans << '\n';
	return 0;
}