#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5, mod = 1e9 + 7;
long long f[N], _f[N], inv[N], ans;
inline long long C(int x, int y) {
  return y > x ? 0 : f[x] * _f[y] % mod * _f[x - y] % mod;
}
inline long long A(int x, int y) { return y > x ? 0 : f[x] * _f[x - y] % mod; }
long long ksm(long long a, long long x) {
  long long res = 1;
  while (x) {
    if (x % 2 == 1) res = res * a % mod;
    a = a * a % mod, x /= 2;
  }
  return res;
}
int main() {
  int n, k;
  scanf("%d%d", &k, &n);
  f[0] = f[1] = _f[0] = _f[1] = inv[0] = inv[1] = 1;
  for (register int i = 2; i <= k; ++i)
    f[i] = f[i - 1] * i % mod,
    inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod,
    _f[i] = _f[i - 1] * inv[i] % mod;
  for (register int i = 1; i <= k; ++i) {
    if (n - i >= 2)
      (ans += ksm(k, n - i - 2) *
              (1ll * k * k % mod * A(k, i) % mod * A(k, i) % mod -
               A(k, i + 1) * A(k, i + 1) % mod + mod) %
              mod) %= mod;
    else if (n - i == 1)
      (ans += (1ll * k * A(k, i) % mod * A(k, i) % mod -
               A(k, i + 1) * A(k - 1, i) % mod + mod) %
              mod) %= mod;
    else
      (ans +=
       (1ll * A(k, i - n) * A(k - (i - n), n) % mod * A(k - (i - n), n) % mod -
        A(k, i - n + 2) * A(k - (i - n + 2), n - 1) % mod *
            A(k - (i - n + 2), n - 1) % mod) %
       mod) %= mod;
  }
  printf("%lld", (ans % mod + mod) % mod);
  return 0;
}
