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
# define read read1<ll>()
# define Type template<typename T>
Type T read1(){
	T t=0;
	char k;
	bool vis=0;
	do (k=getchar())=='-'&&(vis=1);while('0'>k||k>'9');
	while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
	return vis?-t:t;
}
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
const int mod=998244353,g=3,invg=332748118;
int qkpow(int n,int m,int p){
	if(!m)return 1;
	ll t=qkpow(n,m>>1,p);
	t=t*t%p;
	if(m&1)t=t*n%p;
	return t;
}
void NTT(int *a,int len,int Ty){
	int *r=new int[len],L=log2(len);r[0]=0;
	for(int i=0;i<len;++i){
		r[i]=(r[i>>1]>>1)|((i&1)<<L-1);
		if(i<r[i])swap(a[i],a[r[i]]);
	}
	for(int i=1;i<len;i<<=1){
		int T=qkpow(Ty==1?g:invg,(mod-1)/(i<<1),mod);
		for(int W=i<<1,j=0;j<len;j+=W){
			ll t=1;
			for(int k=0;k<i;++k,t=t*T%mod){
				int x=a[j+k],y=1ll*t*a[i+j+k]%mod;
				a[j+k]=x+y;if(a[j+k]>=mod)a[j+k]-=mod;
				a[i+j+k]=x-y;if(a[i+j+k]<0)a[i+j+k]+=mod;
			}
		}
	}
	if(Ty!=1){
		ll x=qkpow(len,mod-2,mod);
		for(int i=0;i<len;++i)a[i]=a[i]*x%mod;
	}
	delete[] r;
}
int s,k,S=1,fac[100005],inv[100005],a[1<<18],b[1<<18];
void init(){
	*fac=*inv=fac[1]=inv[1]=1;
	for(int i=2;i<=k;++i)fac[i]=1ll*fac[i-1]*i%mod,inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
	for(int i=2;i<=k;++i)inv[i]=1ll*inv[i-1]*inv[i]%mod;
}
int main(){
	s=read,k=read;init();
	while(S<=(k<<1))S<<=1;
	for(int i=0;i<=k;++i){
		a[i]=i&1?mod-inv[i]:inv[i];
		b[i]=1ll*qkpow(i,k,mod)*inv[i]%mod;
	}NTT(a,S,1);NTT(b,S,1);
	for(int i=0;i<S;++i)a[i]=1ll*a[i]*b[i]%mod;
	NTT(a,S,-1);int ans=0,t=1;
	for(int i=0;i<=k;++i){
		if(i>s)break;
		ans=(ans+1ll*a[i]*fac[i]%mod*t%mod*qkpow(s+1,s-i,mod))%mod;
		t=1ll*t*inv[i+1]%mod*fac[i]%mod*(s-i)%mod;
	}
	printf("%d",ans);
	return 0;
}
