#include <bits/stdc++.h>
using namespace std;
const long long N = 1e6 + 5;
const long long mod = 1e9 + 7;
long long k, w, A, B, fac[N], inv[N], sum[N];
inline long long qpow(long long tep, long long p) {
  long long ret = 1;
  while (p) {
    if (p & 1) (ret *= tep) %= mod;
    (tep *= tep) %= mod, p >>= 1;
  }
  return ret;
}
inline long long C(long long n, long long k) {
  if (k > n - k) k = n - k;
  if (!k)
    return 1;
  else if (k == 1)
    return n;
  return fac[n] * inv[k] % mod * inv[n - k] % mod;
}
inline long long P(long long n, long long k) { return C(n, k) * fac[k] % mod; }
inline void Init() {
  fac[0] = 1ll;
  for (long long i = 1; i <= k; i++) fac[i] = fac[i - 1] * i % mod;
  inv[k] = qpow(fac[k], mod - 2);
  for (long long i = k - 1; i; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
}
inline long long cal(long long w) {
  if (w <= 1) return 0;
  long long ret = 0;
  long long c = k - (w - 1);
  for (long long i = 1; i <= c; i++) {
    long long tep = P(k - i, w - 1);
    (tep *= tep) %= mod;
    (tep *= P(k, i)) %= mod;
    (ret += tep) %= mod;
  }
  return ret;
}
inline long long cal2(long long w) {
  if (w <= 1) return 0;
  long long ret = 0;
  for (long long m = max(0ll, w - 1 - k); m < w - 2; m++) {
    long long len = w - 1 - m;
    long long tep = P(k, len);
    (tep *= tep) %= mod;
    (tep *= qpow(k, m)) %= mod;
    (ret += tep) %= mod;
  }
  return ret;
}
int main() {
  cin >> k >> w;
  if (k == 1) puts("1"), exit(0);
  Init();
  if (k > w) A = cal(w + 1);
  if (k > w - 1) B = cal(w);
  (A += cal2(w + 1)) %= mod;
  (B += cal2(w)) %= mod;
  long long ans = (A - B + mod) % mod;
  (ans += qpow(k, w + 1)) %= mod;
  cout << ans << '\n';
}
