#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int MOD=1e9+7;
int n,m;
ll powMod(ll a,int b){
ll ans=1;
for(;b;b>>=1,a=(a*a)%MOD)
if(b&1) ans=(ans*a)%MOD;
return ans;
}
void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
if(b==0) {d=a;x=1;y=0;}
else {exgcd(b,a%b,d,y,x);y-=(a/b)*x;}
}
ll inv(ll a,ll n){
ll d,x,y;
exgcd(a,n,d,x,y);
return d==1?(x+n)%n:-1;
}
int main(){
scanf("%d%d",&n,&m);
ll ans=m;
for(int i=2;i<=n;i++){
ll p=powMod(i,m);
ll tmp=i*(p-1)%MOD*inv(i-1,MOD)%MOD;
ans=(ans+tmp)%MOD;
}
printf("%lld",ans);
}