#include <bits/stdc++.h>
using namespace std;
int N, K, t;
const int mod = 1000000007;
vector<int> v;
vector<bool> mark, mem;
bool c = false;
long long int res = 0;
void pre() {
  fill(mem.begin(), mem.end(), false);
  fill(mark.begin(), mark.end(), false);
}
void start(int st) {
  if (st == 0) {
    c = true;
    return;
  }
  mark[st] = true;
  int x = v[st];
  if (mark[x]) {
    c = false;
    return;
  }
  if (x == 0) {
    c = true;
    return;
  }
  start(x);
}
void check() {
  for (int i = 0; i < t; i++) {
    c = false;
    pre();
    start(i);
    if (!c) return;
  }
  res++;
  res %= mod;
}
void f(int pos = 0) {
  if (pos == t) {
    check();
    return;
  }
  for (int i = 0; i < t; i++) {
    {
      v[pos] = i;
      f(pos + 1);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> N >> K;
  if (N == K && N == 1) {
    cout << 1 << endl;
    return 0;
  }
  t = min(K, 8);
  v.resize(t);
  mark.resize(t, false);
  mem.resize(t, false);
  if (K < 8)
    f();
  else
    res = 2097152;
  for (int i = K; i < N; i++) {
    res *= (N - K);
    res %= mod;
  }
  cout << res << endl;
  return 0;
}
