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<map>
#include<set>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;

typedef pair<int,int> pii;
typedef map<int,int> mii;
typedef set<int> si;
typedef vector<int> vi;
typedef long long ll;
#define pb push_back
#define mp make_pair

const ll mod=998244353LL;
ll power(ll a,ll b)
{
    ll res=1;
    for (;b;b>>=1)
    {
        if (b&1) res=res*a%mod;
        a=a*a%mod;
    }
    return res;
}
const ll g=3LL;
ll invg=power(g, mod-2);


    


void dft(ll *f, int n, bool flag)
{
    vector<int> rev(n);
    vector<ll> ww(n<<1);
    rev[0]=0;
    for (int i=0;i<n;i++) rev[i]=(rev[i>>1]>>1)+((i&1)*(n>>1));
    
    for (int i=0;i<n;i++)
    if (i<rev[i]) swap(f[i], f[rev[i]]);
    
    for (int p=2;p<=n;p*=2)
    {
        int m=p>>1;
        ll w0=power(flag?invg:g,(mod-1)/p);
        
        ww[0]=1;
        for (int i=1;i<m;i++) ww[i]=ww[i-1]*w0%mod;
        for (int i=0;i<n;i+=p)
        {
            for (int j=i;j<i+m;j++)
            {
                int tmp=ww[j-i]*f[m+j]%mod;
                f[j+m]=(f[j]-tmp);
                if (f[j+m]<0) f[j+m]+=mod;
                f[j]=(f[j]+tmp);
                if (f[j]>=mod) f[j]-=mod;
            }
        }
    }
    
    if (flag) 
    {
        ll invn=power(n, mod-2);
        for (int i=0;i<n;i++) f[i]=f[i]*invn%mod;
    }       
}



const int maxn=(1<<18)+10;
ll a[maxn], b[maxn], fac[maxn], invfac[maxn];
int n,m;


int main()
{
    scanf("%d%d",&n,&m);
    fac[0]=1;invfac[0]=1;
    for (int i=1;i<=m;i++)
    {
        fac[i]=fac[i-1]*i%mod;
        invfac[i]=invfac[i-1]*power(i,mod-2)%mod;
    }
    
    for (int i=0;i<=m;i++)
    {
        a[i]=power(i,m)*invfac[i]%mod;
        b[i]=power(mod-1,i)*invfac[i]%mod;
    }
    int nn=1;
    for (;nn<m*2+1;nn<<=1);
    dft(a,nn,0);
    dft(b,nn,0);
    for (int i=0;i<nn;i++) a[i]=a[i]*b[i]%mod;
    dft(a,nn,1);
    
    ll res=0;
    ll C=1;
    for (int i=0;i<=m && i<=n;i++)
    {
        res+= a[i]*fac[i]%mod*C%mod*invfac[i]%mod*power(n+1, n-i)%mod;
        C=C*(n-i)%mod;
        res%=mod;
    }
    printf("%lld\n", res);
        
    
    
	return 0;
}