#include <bits/stdc++.h>
using namespace std;
long long inv[1000011], fac[1000011], n, m, k, ans;
void init() {
  inv[1] = inv[0] = fac[0] = 1;
  for (long long i = 1; i <= k; i++) fac[i] = (fac[i - 1] * i) % 1000000007;
  for (long long i = 2; i <= k; i++)
    inv[i] = (1000000007 - 1000000007 / i) * inv[1000000007 % i] % 1000000007;
  for (long long i = 1; i <= k; i++) inv[i] = inv[i] * inv[i - 1] % 1000000007;
}
long long ksm(long long x, long long y) {
  long long ret = 1;
  while (y) {
    if (y & 1) ret = ret * x % 1000000007;
    x = x * x % 1000000007;
    y >>= 1;
  }
  return ret;
}
long long A(long long n, long long m) {
  if (n < m) return 0;
  return fac[n] * inv[n - m] % 1000000007;
}
signed main() {
  scanf("%lld%lld", &k, &n);
  init();
  for (long long i = 1; i <= k; i++) {
    if (n - i >= 2) {
      ans = (ans +
             (A(k, i) * A(k, i) % 1000000007 * k % 1000000007 * k % 1000000007 -
              A(k, i + 1) * A(k, i + 1) % 1000000007) *
                 ksm(k, n - i - 2) % 1000000007) %
            1000000007;
      ans = (ans % 1000000007 + 1000000007) % 1000000007;
    } else if (n - i == 1) {
      ans =
          (ans + A(k, i) * A(k, i) % 1000000007 * k % 1000000007 % 1000000007 -
           A(k, i + 1) * A(k - 1, i) % 1000000007 + 1000000007) %
          1000000007;
      ans = (ans % 1000000007 + 1000000007) % 1000000007;
    } else {
      ans = (ans +
             A(k, i - n) * A(k - i + n, n) % 1000000007 * A(k - i + n, n) %
                 1000000007 -
             A(k, i - n + 2) * A(k - i + n - 2, n - 1) % 1000000007 *
                 A(k - i + n - 2, n - 1) % 1000000007 +
             1000000007) %
            1000000007;
      ans = (ans % 1000000007 + 1000000007) % 1000000007;
    }
  }
  printf("%lld", ans);
  return 0;
}
