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 MAXN=3e5+10;
const int MAXM=18;
const ll mod=998244353;

ll powmod(ll x,ll p)
{
	ll ret=1;
	while(p)
	{
		if(p&1)
			ret=(ret*x)%mod;
		x=x*x%mod;
		p>>=1;
	}
	return ret;
}

ll n,k,C[MAXN],ans,A[MAXN],B[MAXN],rev[MAXN];
ll fact[MAXN],ifact[MAXN];
 
void NTT(ll *A, bool inv){
	ll n=(1<<MAXM);
	for(int i=0;i<(1<<MAXM);++i)
		if(rev[i]<i)
			swap(A[i],A[rev[i]]);
	for(int ln=1;ln<n;ln<<=1){
		ll w=powmod(3,mod/2/ln);
		if(inv)
			w=powmod(w,mod-2);
		for(int i=0;i<n;i+=ln+ln){
			ll wn=1;
			for(int j=i;j<i+ln;++j){
				int x=A[j],y=A[j+ln]*wn%mod;
				A[j]=(x+y)%mod;
				A[j+ln]=(x-y+mod)%mod;
				wn=wn*w%mod;
			}
		}
	}
	if(inv){
		ll invn=powmod(1<<MAXM,mod-2);
		for(int i=0;i<n;++i)
			A[i]=A[i]*invn%mod;
	}
}

ll power(ll a, ll b, ll md) 
{
	return(!b?1:(b&1?a*power(a*a%md,b/2,md)%md:power(a*a%md,b/2,md)%md));
}

int main()
{
	scanf("%lld%lld",&n,&k);
	C[0]=fact[0]=1;
	for(int i=1;i<MAXN;++i){
		C[i]=C[i-1]*(n-i+1)%mod*powmod(i,mod-2)%mod;
		fact[i]=fact[i-1]*i%mod;
	}
	ifact[MAXN-1]=powmod(fact[MAXN-1],mod-2);
	for(int i=MAXN-2;i>=0;--i)
		ifact[i]=ifact[i+1]*(i+1)%mod;
	for(int i=1;i<(1<<MAXM);++i)
		rev[i]=(rev[i>>1]>>1)|((i&1)<<(MAXM-1));
	for(int i=0;i<=k;++i)
	{
		A[i]=powmod(i,k)*ifact[i]%mod;
		B[i]=ifact[i];
		if(i%2)
			B[i]=(mod-B[i])%mod;
	}
	NTT(A,0),NTT(B,0);
	for(int i=0;i<MAXN;++i)
		A[i]=A[i]*B[i]%mod;
	NTT(A,1);
	for(int i=1;i<=k;++i)
	{
		ans=(ans+A[i]*C[i]%mod*powmod(n+1,abs(n-i))%mod*fact[i]%mod)%mod;
	}
	printf("%lld\n",ans);
}
