#include <bits/stdc++.h>
using namespace std;
int k, n, m, ans, pw1, pw2, inv_k, mod = 1000000007;
int fac[2000010], inv[2000010];
int fpow(int i, int j) {
  int ret = 1;
  while (j) {
    if (j & 1) ret = (long long)ret * i % mod;
    i = (long long)i * i % mod;
    j >>= 1;
  }
  return ret;
}
int calc(int i, int j) {
  if (i < j) return 0;
  return (long long)fac[i] * inv[i - j] % mod;
}
int sqr(int x) { return (long long)x * x % mod; }
int main() {
  int i, j;
  scanf("%d%d", &k, &n);
  fac[0] = 1;
  for (i = 1; i <= k; i++) fac[i] = (long long)fac[i - 1] * i % mod;
  inv[k] = fpow(fac[k], mod - 2);
  for (i = k - 1; i >= 0; i--) inv[i] = (long long)inv[i + 1] * (i + 1) % mod;
  pw1 = fpow(k, n);
  pw2 = fpow(k, n - 2);
  inv_k = fpow(k, mod - 2);
  for (i = 1; i <= k; i++) {
    pw2 = (long long)pw2 * inv_k % mod;
    m = i;
    if (n > m)
      ans = (ans +
             (long long)pw2 *
                 ((long long)k * k % mod * calc(k, m) % mod * calc(k, m) % mod -
                  sqr(calc(k, m + 1)) % mod) %
                 mod) %
            mod;
    else if (n - m == 1)
      ans = (ans + (long long)k * ((long long)calc(k, m) * calc(k, m) % mod -
                                   sqr(calc(k - 1, m)))) %
            mod;
    else
      ans = (ans + (long long)calc(k, m - n) *
                       (sqr(calc(k - m + n, n)) -
                        (long long)(k - m + n) * (k - m + n - 1) % mod *
                            sqr(calc(k - m + n - 2, n - 1)) % mod) %
                       mod) %
            mod;
  }
  printf("%d\n", (ans + mod) % mod);
  return 0;
}
