// LUOGU_RID: 157318629
#include <iostream>
using namespace std;
typedef long long ll;
const int N=1e6+10;
const int mod=1e9+7;
ll y[N],fac[N],inv[N],pre[N],suf[N];
int n,k;
ll ans;
ll q_pow(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1) res=(res*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return res;
}
int main()
{
cin>>n>>k;
for(int i=1; i<=k+2; i++)
y[i]=(y[i-1]+q_pow(i,k))%mod;
fac[0]=1;
for(int i=1; i<=k+3; i++) fac[i]=fac[i-1]*i%mod;
pre[0]=1,suf[k+3]=1;
for(int i=1; i<=k+2; i++) pre[i]=pre[i-1]*(n-i)%mod;
for(int i=k+2; i>=1; i--) suf[i]=suf[i+1]*(n-i)%mod;
inv[k+3]=q_pow(fac[k+3],mod-2);
for(int i=k+2;i+1>=1;i--) inv[i]=inv[i+1]*(i+1)%mod;
for(int i=1;i<=k+2;i++)
{
ll t=y[i]*pre[i-1]%mod;
t=t*suf[i+1]%mod;
t=t*inv[i-1]%mod;
t=t*inv[k+2-i]%mod;
if((k+2-i)&1) ans=(ans-t+mod)%mod;
else ans=(ans+t)%mod;
}
cout<<ans<<endl;
return 0;
}
Ly8gTFVPR1VfUklEOiAxNTczMTg2MjkKI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7Cgpjb25zdCBpbnQgTj0xZTYrMTA7CmNvbnN0IGludCBtb2Q9MWU5Kzc7CmxsIHlbTl0sZmFjW05dLGludltOXSxwcmVbTl0sc3VmW05dOwppbnQgbixrOwpsbCBhbnM7CgpsbCBxX3BvdyhsbCBhLGxsIGIpCnsKICAgIGxsIHJlcz0xOwogICAgd2hpbGUoYikKICAgIHsKICAgICAgICBpZihiJjEpIHJlcz0ocmVzKmEpJW1vZDsKICAgICAgICBhPShhKmEpJW1vZDsKICAgICAgICBiPj49MTsKICAgIH0KICAgIHJldHVybiByZXM7Cn0KCmludCBtYWluKCkKewogICAgY2luPj5uPj5rOwogICAgZm9yKGludCBpPTE7IGk8PWsrMjsgaSsrKQogICAgICAgIHlbaV09KHlbaS0xXStxX3BvdyhpLGspKSVtb2Q7CgogICAgZmFjWzBdPTE7CiAgICBmb3IoaW50IGk9MTsgaTw9ayszOyBpKyspIGZhY1tpXT1mYWNbaS0xXSppJW1vZDsKCiAgICBwcmVbMF09MSxzdWZbayszXT0xOwogICAgZm9yKGludCBpPTE7IGk8PWsrMjsgaSsrKSBwcmVbaV09cHJlW2ktMV0qKG4taSklbW9kOwogICAgZm9yKGludCBpPWsrMjsgaT49MTsgaS0tKSBzdWZbaV09c3VmW2krMV0qKG4taSklbW9kOwoKICAgIGludltrKzNdPXFfcG93KGZhY1trKzNdLG1vZC0yKTsKICAgIGZvcihpbnQgaT1rKzI7aSsxPj0xO2ktLSkgaW52W2ldPWludltpKzFdKihpKzEpJW1vZDsKCgogICAgZm9yKGludCBpPTE7aTw9aysyO2krKykKICAgIHsKICAgICAgICBsbCB0PXlbaV0qcHJlW2ktMV0lbW9kOwogICAgICAgIHQ9dCpzdWZbaSsxXSVtb2Q7CiAgICAgICAgdD10KmludltpLTFdJW1vZDsKICAgICAgICB0PXQqaW52W2srMi1pXSVtb2Q7CiAgICAgICAgaWYoKGsrMi1pKSYxKSBhbnM9KGFucy10K21vZCklbW9kOwogICAgICAgIGVsc2UgYW5zPShhbnMrdCklbW9kOwogICAgfQoKICAgIGNvdXQ8PGFuczw8ZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=