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;
const int mod=998244353,g=3;
const int N=1e6+5;
int pow2(int x,int y) {
	int mul=1;
	for(;y;y>>=1,x=x*1ll*x%mod) if(y&1) mul=mul*1ll*x%mod;
	return mul;
}
int n,k;
int fac[N],inv[N];
int a[N<<1],b[N<<1];
int lim,rev[N<<1],q;
void NTT(int *v,int id) {
	for(int i=1;i<lim;i++) if(rev[i]<i) swap(v[rev[i]],v[i]);
	for(int mid=1;mid<lim;mid<<=1) {
		int w=pow2(g,(mod-1)/(mid<<1));
		if(id==-1) w=pow2(w,mod-2);
		for(int l=0;l<lim;l+=(mid<<1)) {
			int wn=1;
			for(int i=l;i<mid+l;i++,wn=wn*1ll*w%mod) {
				int x=v[i],y=1ll*v[i+mid]*wn%mod;
				v[i]=(x+y)%mod;
				v[i+mid]=(x-y+mod)%mod;
			}
		}
	}
	if(id==-1) {
		for(int i=0;i<lim;i++) v[i]=v[i]*1ll*pow2(lim,mod-2)%mod;
	}
	return;
}
void init() {
	fac[0]=1;
	for(int i=1;i<=k;i++) fac[i]=fac[i-1]*1ll*i%mod;
	inv[0]=1;
	for(int i=1;i<=k;i++) inv[i]=pow2(fac[i],mod-2);
	for(int i=0;i<=k;i++) {
		if(i&1) a[i]=mod-inv[i];
		else a[i]=inv[i];
		b[i]=inv[i]*1ll*pow2(i,k)%mod;
	}
	
	lim=1;
	q=0;
	while(lim<k+k+1) lim<<=1,q++;
	for(int i=1;i<lim;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(q-1));
	NTT(a,1);
	NTT(b,1);
	for(int i=0;i<lim;i++) a[i]=a[i]*1ll*b[i]%mod;
	NTT(a,-1);
	return;
}
int main() {
	scanf("%d%d",&n,&k);
	init();
	long long ans=0,now=1;
	for(int i=1;i<=k;i++) {
		now=now*(n-i+1)%mod;
		if(!now) break;
		ans=(ans+a[i]*1ll*now%mod*pow2(n+1,n-i)%mod)%mod;
	}
	printf("%lld\n",ans);
	return 0;
}