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;
typedef unsigned long long ull;
const int maxn=262144+25;
const int mod=998244353;
const int i2i2=(mod+1)/2;
int n,m,i,j,t,k,s,*rev[20],jc[maxn],ijc[maxn],Log[maxn],a[maxn];
ull *pre3[20],iv2[20],f[maxn],g[maxn],h[maxn];

inline int Pow(int x,int y,int mo)
{
	int ret=1;
	while (y)
	{
		if (y&1) ret=1ll*ret*x%mo;
		x=1ll*x*x%mo;y>>=1;
	}
	return ret;
}
inline void NTT(ull *a,int bit,int x)
{
	int i,j,k,len=(1<<bit);ull *a0,*a1,*wn,tmp;
	for (i=1;i<len;++i) if (rev[bit][i]>i) swap(a[rev[bit][i]],a[i]);
	for (i=1;i<len;i<<=1)
	{
		for (j=0;j<len;j+=(i<<1))
		{
			a0=a+j;a1=a+j+i;wn=pre3[Log[i]+1];
			for (k=0;k<i;++k,++wn,++a0,++a1)
			{
				tmp=*wn**a1%mod;
				*a1=*a0+mod-tmp;*a0+=tmp;
			}
		}
	}
	for (i=0;i<len;++i) a[i]%=mod;
	if (x==-1)
	{
		tmp=iv2[bit];
		reverse(a+1,a+len);
		for (i=0;i<len;++i) a[i]=a[i]*tmp%mod;
	}
}

int main()
{
	jc[0]=ijc[0]=jc[1]=ijc[1]=1;iv2[0]=1;
	for (i=2;i<maxn;++i) jc[i]=1ll*i*jc[i-1]%mod,Log[i]=Log[i>>1]+1;
	ijc[maxn-1]=Pow(jc[maxn-1],mod-2,mod);
	for (i=maxn-2;i>1;--i) ijc[i]=1ll*(i+1)*ijc[i+1]%mod;
	for (i=1;i<=18;++i)
	{
		rev[i]=new int[(1<<i)+1];pre3[i]=new ull[(1<<i)+2];
		rev[i][0]=0;pre3[i][0]=1;pre3[i][1]=Pow(3,(mod-1)>>i,mod);iv2[i]=iv2[i-1]*1ull*i2i2%mod;
		for (j=1;j<(1<<i);++j)
		 rev[i][j]=((rev[i][j>>1]>>1)|((j&1)<<i-1)),
		  pre3[i][j]=pre3[i][j-1]*pre3[i][1]%mod;
	}
	scanf("%d%d",&n,&m);
	for (i=0;i<=m;++i)
	{
		f[i]=Pow(i,m,mod)*1ull*ijc[i]%mod;
		g[i]=(i&1?mod-ijc[i]:ijc[i]);
	}
	t=Log[m]+2;
	NTT(f,t,1);NTT(g,t,1);
	for (i=0;i<(1<<t);++i) f[i]=f[i]*g[i]%mod;
	NTT(f,t,-1);
	s=0;int mu=Pow((n+1)%mod,n%(mod-1),mod);
	a[0]=1;a[1]=Pow((n+1)%mod,mod-2,mod);
	for (i=2;i<=m;++i) a[i]=a[i-1]*1ll*a[1]%mod;
	for (i=1;i<=m;++i)
	{
		mu=1ll*mu*(n-i+1)%mod;
		int now=f[i]*1ull*mu%mod*a[i]%mod;
		s=(s+now)%mod;
	}
	printf("%d\n",s);
	return 0;
}
