#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
long long int power(int a, int b) {
  long long int x = 1, y = a;
  while (b > 0) {
    if (b & 1) x = (x * y) % (int)(1e9 + 7);
    y = (y * y) % (int)(1e9 + 7);
    b /= 2;
  }
  return x;
}
int main() {
  long long int a[] = {0, 1, 2, 9, 64, 625, 7776, 117649, 2097152, 0};
  int n, k;
  long long int temp;
  scanf("%d", &n);
  scanf("%d", &k);
  temp = power(n - k, n - k);
  temp = (temp * a[k]) % (int)(1e9 + 7);
  cout << temp << endl;
  return 0;
}
