#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;
}