#include <bits/stdc++.h>
using namespace std;
bool debug = false;
int n, m, k;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
long long ln, lk, lm;
int a[10];
bool v[9], vv[9];
bool walk(int x) {
  v[x] = 1;
  if (a[x] == 1 || vv[a[x]]) return vv[x] = 1;
  if (v[a[x]]) return 0;
  return vv[x] = walk(a[x]);
}
bool ck() {
  for (int i = 2; i <= k; i++) {
    v[i] = 0;
    vv[i] = 0;
  }
  for (int i = 2; i <= k; i++)
    if (!v[i]) {
      if (!walk(i)) {
        return 0;
      }
    }
  return 1;
}
long long tmp;
void dfs(int x) {
  if (x == k + 1) {
    if (ck()) tmp++;
    return;
  }
  for (int(i) = 1; (i) <= (int)(k); (i)++)
    if (i != x) {
      a[x] = i;
      dfs(x + 1);
    }
}
int main() {
  scanf("%d%d", &n, &k);
  long long ans = k;
  dfs(2);
  (ans *= tmp) %= 1000000007;
  m = n - k;
  for (int i = k + 1; i <= n; i++) {
    (ans *= m) %= 1000000007;
  }
  printf("%lld\n", ans);
  return 0;
}
