//#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef long double ld; typedef pair Pii; typedef pair Pil; typedef pair Pll; typedef pair Pli; #define fi first #define se second #define mp make_pair const ll MOD = 1e9 + 7; const ll MOD2 = 998244353; const ll INF = 1ll << 60; const double PI = 2 * asin(1); void yes() {printf("yes\n");} void no() {printf("no\n");} void Yes() {printf("Yes\n");} void No() {printf("No\n");} void YES() {printf("YES\n");} void NO() {printf("NO\n");} ll Pow(ll A, ll N){ if (N == 0) return 1; if (N % 2 == 0) return Pow(A * A % MOD, N / 2) % MOD; else return A * Pow(A * A % MOD, N / 2) % MOD; } ll nCr(ll N, ll R){ ll ans = 1; for (ll i = 1; i <= R; i++){ ans *= Pow(i, MOD - 2); ans %= MOD; ans *= N - i + 1; ans %= MOD; } return ans; } int main(){ ll N, M; cin >> N >> M; ll ans = nCr(N, M); for (ll i = 1; i <= M; i++){ ans *= i; ans %= MOD; } if (N != M) ans *= Pow(N - M, M); cout << ans % MOD << endl; return 0; }