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<cstdio>
#include<algorithm>
#define P 998244353
#define N 100005

inline int fmo(int x){
	return x+((x>>31)&P);
}
inline int fp(int x,int k){
	int res=1;
	for(;k;k>>=1,x=1ll*x*x%P)
		if(k&1)
			res=1ll*res*x%P;
	return res;
}

const int G=3,iG=fp(G,P-2);
int lmt=1,rev[N<<2];
inline void build(int len){
	while(lmt<len)
		lmt<<=1;
	for(int i=0;i<lmt;i++)
		rev[i]=(rev[i>>1]>>1)|((i&1)*(lmt>>1));
}
inline void ntt(int *a,int opt){
	for(int i=0;i<lmt;i++)
		if(i<rev[i])
			std::swap(a[i],a[rev[i]]);
	for(int mid=1;mid<lmt;mid<<=1){
		int wn=fp(opt==1?G:iG,(P-1)/(mid<<1));
		for(int i=0;i<lmt;i+=(mid<<1))
			for(int j=0,w=1;j<mid;j++,w=1ll*w*wn%P){
				int x=a[i+j],y=1ll*w*a[i+j+mid]%P;
				a[i+j]=(x+y)%P;
				a[i+j+mid]=(x-y+P)%P;
			}
	}
	if(opt==-1){
		int tmp=fp(lmt,P-2);
		for(int i=0;i<lmt;i++)
			a[i]=1ll*a[i]*tmp%P;
	}
}

int n,k;

int inv[N];

int f[N<<2],g[N<<2];

int ans;

int main(){
	scanf("%d%d",&n,&k);
	inv[0]=inv[1]=1;
	for(int i=2;i<=k+1;i++)
		inv[i]=fmo(-1ll*P/i*inv[P%i]%P);
	for(int i=2;i<=k;i++)
		inv[i]=1ll*inv[i-1]*inv[i]%P;
	for(int i=0;i<=k;i++)
		f[i]=1ll*fp(i,k)*inv[i]%P;
	for(int i=0;i<=k;i++)
		g[i]=1ll*((i&1)?P-1:1)*inv[i]%P;
	build((k+1)<<1);
	ntt(f,1),ntt(g,1);
	for(int i=0;i<lmt;i++)
		f[i]=1ll*f[i]*g[i]%P;
	ntt(f,-1);
	for(int i=0,tmp=1;i<=k&&i<=n;tmp=1ll*tmp*(n-i)%P,i++)
		ans=fmo(ans+1ll*f[i]*tmp%P*fp(n+1,n-i)%P-P);
	printf("%d\n",ans);
}
