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 lxl;
const int base=19,G=3;
const int MOD=998244353;

int n,k;
lxl ans;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch))(ch=='-')&&(f=-f),ch=getchar();
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	return x*f;
}
inline int expow(int n,int k){
	int ans=1;
	for(;k;k>>=1,n=1ll*n*n%MOD)(k&1)&&(ans=1ll*ans*n%MOD);
	return ans;
}

int inv[1<<base],fac[1<<base],ifac[1<<base];
int w[1<<base];
inline void init(){
	int i,len;
	inv[1]=fac[0]=fac[1]=ifac[0]=ifac[1]=1;
	for(i=2;i<(1<<base);++i){
		inv[i]=1ll*(MOD-MOD/i)*inv[MOD%i]%MOD;
		fac[i]=1ll*fac[i-1]*i%MOD;
		ifac[i]=1ll*ifac[i-1]*inv[i]%MOD;
	}
	for(len=1;len<(1<<base);len<<=1){
		const int tmp=expow(G,MOD/(len<<1));w[len]=1;
		for(i=1;i<len;++i) w[i|len]=1ll*w[(i-1)|len]*tmp%MOD;
	}
}

int tr[1<<base];
lxl T[1<<base];
inline void NTT(int *a,int n,bool type){
	int i,j,len;
	for(i=0;i<n;++i) T[i]=a[tr[i]=(tr[i>>1]>>1)|(i&1?n>>1:0)];
	for(len=1;len<n;len<<=1){
		if(len==(1<<16)) for(i=0;i<n;++i) T[i]%=MOD;
		for(i=0;i<n;i+=(len<<1))
			for(j=0;j<len;++j){
				const int tmp=1ull*T[i|j|len]*w[j|len]%MOD;
				T[i|j|len]=T[i|j]-tmp+MOD;T[i|j]+=tmp; 
			}
	}
	for(i=0;i<n;++i) a[i]=T[i]%MOD;
	if(type) return;reverse(a+1,a+n);
	int inv=expow(n,MOD-2);
	for(i=0;i<n;++i) a[i]=1ll*a[i]*inv%MOD; 
}

int S[1<<base],A[1<<base];

int main(){
	init();
	int i,lim; 
	n=read();k=read();
	for(i=0;i<=k;++i){
		S[i]=ifac[i];A[i]=1ll*expow(i,k)*ifac[i]%MOD;
		if(i&1) S[i]=MOD-S[i];
	}
	for(lim=1;lim<(k<<1);lim<<=1);
	NTT(S,lim,1);NTT(A,lim,1);
	for(i=0;i<lim;++i) S[i]=1ll*S[i]*A[i]%MOD;
	NTT(S,lim,0);
	int C=n;
	for(i=1;i<=min(n,k);C=1ll*C*(n-i)%MOD*inv[i+1]%MOD,++i)
		ans+=1ll*S[i]*fac[i]%MOD*C%MOD*expow(n+1,n-i)%MOD;
	printf("%lld\n",ans%MOD);
	return 0;
}