#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 20;
const double EPS = 1e-15;
const int MAXN = 1000000;
const int MOD = 1000000007;
int a[MAXN];
int dp[9] = {0, 1, 2, 9, 64, 625, 7776, 117649, 2097152};
bool mk[1001];
int config[1001];
int k, n;
long long ans = 0;
bool validpos(int i) {
  mk[i] = true;
  if (i == 0) return true;
  if (mk[config[i]]) return false;
  return validpos(config[i]);
}
bool valid() {
  for (int i = 1; i < k; i++) {
    memset(mk, 0, sizeof(mk));
    if (!validpos(i)) return false;
  }
  return true;
}
void rec(int i) {
  if (i == k) {
    if (valid()) ans++;
    return;
  }
  for (int j = 0; j < k; j++) {
    config[i] = j;
    rec(i + 1);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  cin >> k;
  ans = dp[k];
  for (int i = 0; i < n - k; i++) {
    ans = (ans * (n - k)) % MOD;
  }
  cout << ans << endl;
  return 0;
}
