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 MAXN 200005
#define lowbit(x) (x&-x)
#define reg register
#define mkpr make_pair
#define fir first
#define sec second
typedef long long LL;
typedef unsigned long long uLL;
const LL INF=0x7f7f7f7f7f7f7f7f;
const int mo=998244353;
const int zero=500;
const LL jzm=2333;
const int orG=3,invG=332748118;
const double Pi=acos(-1.0);
typedef pair<int,int> pii;
const double PI=acos(-1.0);
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
template<typename _T>
void read(_T &x){
	_T f=1;x=0;char s=getchar();
	while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}
	while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}
	x*=f;
}
template<typename _T>
void print(_T x){if(x<0){x=(~x)+1;putchar('-');}if(x>9)print(x/10);putchar(x%10+'0');}
int add(int x,int y){return x+y<mo?x+y:x+y-mo;}
int n,k,rev[MAXN<<2],fac[MAXN],c[MAXN],A[MAXN<<2],B[MAXN<<2],ans,f[MAXN],inv[MAXN];
int qkpow(int a,int s){int t=1;while(s){if(s&1)t=1ll*a*t%mo;a=1ll*a*a%mo;s>>=1;}return t;}
void NTT(int lim,int *A,int typ){
	for(int i=0;i<lim;i++)if(i<rev[i])swap(A[i],A[rev[i]]);
	for(int i=1;i<lim;i<<=1){
		int Wn=qkpow(typ^-1?orG:invG,(mo-1)/(i<<1));
		for(int j=0;j<lim;j+=(i<<1))
			for(int k=0,W=1;k<i;k++,W=1ll*W*Wn%mo){
				int x=A[j+k],y=1ll*W*A[i+j+k]%mo;
				A[j+k]=add(x,y);A[i+j+k]=add(x,mo-y);
			}
	}
	if(typ^-1)return ;int iv=qkpow(lim,mo-2);
	for(int i=0;i<lim;i++)A[i]=1ll*A[i]*iv%mo;
}
void init(){
	c[0]=fac[0]=fac[1]=f[1]=inv[0]=inv[1]=1;
	for(int i=2;i<=k;i++)fac[i]=1ll*i*fac[i-1]%mo,f[i]=1ll*(mo-mo/i)*f[mo%i]%mo,inv[i]=1ll*f[i]*inv[i-1]%mo;
	for(int i=1;i<=min(n,k);i++)c[i]=1ll*c[i-1]*(n-i+1)%mo*f[i]%mo;for(int i=n+1;i<=k;i++)c[i]=0;
}
signed main(){
	read(n);read(k);init();int lim=1,L=0;while(lim<=2*k)lim<<=1,L++;
	for(int i=1;i<lim;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<L-1);
	for(int i=0;i<=k;i++)if(i&1)A[i]=mo-inv[i];else A[i]=inv[i];
	for(int i=0;i<=k;i++)B[i]=1ll*qkpow(i,k)*inv[i]%mo;
	//for(int i=0;i<=k;i++)printf("%d ",A[i]);puts("");
	//for(int i=0;i<=k;i++)printf("%d ",B[i]);puts("");
	NTT(lim,A,1);NTT(lim,B,1);for(int i=0;i<lim;i++)A[i]=1ll*A[i]*B[i]%mo;NTT(lim,A,-1);
	//for(int i=0;i<=k;i++)printf("%d ",A[i]);puts("");
	for(int i=0;i<=min(n,k);i++)ans=add(ans,1ll*A[i]*c[i]%mo*fac[i]%mo*qkpow(n+1,n-i)%mo);
	printf("%d\n",ans);
	return 0;
}
/*
*/