#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const long long mod = 1000000007;
template <class T>
void show(vector<T>& v) {
  for (int i = 0; i < (int)v.size(); i++) cout << v[i] << " ";
  cout << endl;
}
long long expMod(long long base, long long exponente) {
  long long res = 1;
  while (exponente > 0) {
    if ((exponente & 1) != 0) {
      res *= base;
      res %= mod;
    }
    base *= base;
    base %= mod;
    exponente >>= 1;
  }
  return res;
}
int perm[8];
long long factMod(long long n) {
  long long res = 1;
  for (long long i = 1; i <= n; i++) {
    res *= i;
    res %= mod;
  }
  return res;
}
int ok[8];
int get(int pos) {
  if (perm[pos] == 0) return 1;
  if (ok[pos] != -1) return ok[pos];
  ok[pos] = 0;
  int res = get(perm[pos]);
  ok[pos] = res;
  return res;
}
bool check(int k) {
  memset(ok, -1, sizeof(ok));
  for (int h = 0; h < (int)k; h++) {
    if (get(h) == 0) return false;
  }
  return true;
}
int main() {
  long long n, k;
  cin >> n >> k;
  long long res = expMod(n - k, n - k);
  res *= expMod(k, k - 1);
  res %= mod;
  cout << res << endl;
  return 0;
}
