#include <bits/stdc++.h>
using namespace std;
const long long pri = 1000000007LL;
long long n, m, ans;
long long jie[1000005], nijie[1000005];
long long ksm(long long x, long long y) {
  if (y > pri - 2) y %= pri - 1;
  if (!y) return 1;
  long long t = ksm(x, y / 2);
  if (y & 1) return t * t % pri * x % pri;
  return t * t % pri;
}
long long pow(long long x) { return x * x % pri; }
long long p(long long b, long long a) {
  long long x1 = jie[a], x2;
  if (a - b == -1)
    x2 = 0;
  else
    x2 = nijie[a - b];
  return x1 * x2 % pri;
}
int main() {
  scanf("%I64d%I64d", &n, &m);
  jie[0] = 1;
  for (int i = 1; i <= n; i++) jie[i] = jie[i - 1] * i % pri;
  nijie[n] = ksm(jie[n], pri - 2);
  for (int i = n; i; i--) nijie[i - 1] = nijie[i] * i % pri;
  for (int l = 1; l <= n; l++)
    if (m - l > 1)
      ans = (ans + ksm(n, l + m - 2 * l - 2) *
                       (pow(p(l, n)) * pow(n) % pri - pow(p(l + 1, n)) + pri) %
                       pri) %
            pri;
    else if (m - l == 1)
      ans = (ans + pow(p(l, n)) * n % pri - p(l + 1, n) * p(l, n - 1) % pri +
             pri) %
            pri;
    else
      ans = (ans + p(l - m, n) * pow(p(m, n - l + m)) % pri -
             p(l - m + 2, n) * pow(p(m - 1, n - l + m - 2)) % pri + pri) %
            pri;
  printf("%I64d", ans);
  return 0;
}
