#include <bits/stdc++.h>
using namespace std;
void setup()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
const long long mod = 1e9 + 7;
int n, k;
long long res;
long long fac[100002], inv[100002];
inline long long Bpow(long long base, long long ind)
{
long long ret = 1;
do
{
(ret *= (ind & 1 ? base : 1LL)) %= mod;
(base *= base) %= mod;
} while (ind >>= 1);
return ret;
}
inline long long C(int _n, int _k)
{
return (((fac[_n] * inv[_k]) % mod) * inv[_n - _k]) % mod;
}
int main()
{
setup();
cin >> n >> k;
k = n - k;
fac[0] = inv[0] = 1;
for (int i = 1; i <= n + 1; ++i)
{
fac[i] = (fac[i - 1] * i) % mod;
inv[i] = Bpow(fac[i], mod - 2);
}
for (int i = 0; i <= k; ++i)
{
// Eulerian number explicit formula
(res += ((Bpow(mod - 1, i) * C(n + 1, i)) % mod) * Bpow(k + 1 - i, n)) %= mod;
}
cout << res;
return 0;
}