#include <iostream>
#include <vector>
using namespace std;
long long MOD = 1e9 + 7;
// Function to calculate (base^exp) % MOD
long long power(long long base, long long exp) {
long long res = 1;
base %= MOD;
while (exp > 0) {
if (exp % 2 == 1) res = (res * base) % MOD;
base = (base * base) % MOD;
exp /= 2;
}
return res;
}
// Function to calculate modular inverse using Fermat's Little Theorem
long long modInverse(long long n) {
return power(n, MOD - 2);
}
// Precompute factorials for fast nCr calculation
vector<long long> fact;
void precomputeFactorials(int n) {
fact.resize(n + 1);
fact[0] = 1;
for (int i = 1; i <= n; i++) fact[i] = (fact[i - 1] * i) % MOD;
}
long long nCr(int n, int r) {
if (r < 0 || r > n) return 0;
return (((fact[n] * modInverse(fact[r])) % MOD) * modInverse(fact[n - r])) % MOD;
}
long long eulerianFormula(int n, int k) {
long long sum = 0;
precomputeFactorials(n + 1);
for (int j = 0; j <= k + 1; j++) {
long long term = (nCr(n + 1, j) * power(k + 1 - j, n)) % MOD;
if (j % 2 == 1) {
sum = (sum - term + MOD) % MOD;
} else {
sum = (sum + term) % MOD;
}
}
return sum;
}
int main() { // hi
int n, k;
cin >> n >> k;
k--;
if (k < 0 || k >= n) cout << 0 << '\n';
else cout <<eulerianFormula(n, k) << '\n';
return 0;
}