#include <bits/stdc++.h>
using namespace std;
long long m, n, k;
int fact[1000005];
int invf[1000005];
int Quick_Power(int x, int y) {
  int re = 1;
  while (y) {
    if (y & 1) re = 1ll * re * x % 1000000007;
    x = 1ll * x * x % 1000000007;
    y >>= 1;
  }
  return re;
}
void Pre() {
  fact[0] = 1;
  for (int i = 1; i <= k; i++) fact[i] = 1ll * fact[i - 1] * i % 1000000007;
  invf[k] = Quick_Power(fact[k], 1000000007 - 2);
  for (int i = k; i; i--) invf[i - 1] = 1ll * invf[i] * i % 1000000007;
}
int A(int n, int m) { return 1ll * fact[n] * invf[n - m] % 1000000007; }
int main() {
  scanf("%I64d%I64d", &k, &n);
  Pre();
  int ans = 0;
  for (int tmp = 1, i = n + 1; i <= n * 2 - 1 && i <= n + k; i++, tmp = 1) {
    tmp = 1ll * A(k, i - n) * A(k, i - n) % 1000000007;
    tmp = tmp - 1ll * A(k - 1, i - n) * A(k - 1, i - n) % 1000000007;
    tmp = (tmp % 1000000007 + 1000000007) % 1000000007;
    tmp = 1ll * tmp * Quick_Power(k, n * 2 - i) % 1000000007;
    ans = (ans + tmp) % 1000000007;
  }
  for (int tmp = 1, i = n * 2; i <= n + k; i++, tmp = 1) {
    tmp = 1ll * A(k, i - n * 2) * A(k - i + n * 2, n) % 1000000007 *
          A(k - i + n * 2, n) % 1000000007;
    tmp = tmp - 1ll * A(k, i - n * 2 + 2) * A(k - i + n * 2 - 2, n - 1) %
                    1000000007 * A(k - i + n * 2 - 2, n - 1) % 1000000007;
    tmp = (tmp % 1000000007 + 1000000007) % 1000000007;
    ans = (ans + tmp) % 1000000007;
  }
  printf("%d\n", ans);
  return 0;
}
