#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int MN = 1000010;
int exp(int x, int n) {
  int ret = 1;
  while (n) {
    if (n & 1) ret = 1LL * ret * x % mod;
    x = 1LL * x * x % mod;
    n >>= 1;
  }
  return ret;
}
int inv(int x) { return exp(x, mod - 2); }
int fact[MN], invf[MN];
int K, W, ans;
int main() {
  fact[0] = 1;
  for (int i = 1; i < MN; i++) {
    fact[i] = 1LL * fact[i - 1] * i % mod;
  }
  for (int i = 0; i < MN; i++) {
    invf[i] = inv(fact[i]);
  }
  cin >> K >> W;
  for (int i = 1; i <= min(K, W - 1); i++) {
    ans += 1LL * i * fact[K] % mod * fact[K] % mod * exp(K, W - 1 - i) % mod *
           invf[K - i] % mod * invf[K - i] % mod;
    ans %= mod;
  }
  for (int i = W; i <= K; i++) {
    ans += 1LL * W * fact[K] % mod * fact[K - i + W - 1] % mod * invf[K - i] %
           mod * invf[K - i] % mod;
    ans %= mod;
  }
  for (int i = 1; i <= min(K - 1, W - 2); i++) {
    ans += 1LL * i * fact[K] % mod * fact[K] % mod * exp(K, W - 2 - i) % mod *
           invf[K - i] % mod * invf[K - i - 1] % mod;
    ans %= mod;
  }
  for (int i = W - 1; i <= K - 1; i++) {
    ans += 1LL * (W - 1) * fact[K] % mod * fact[K - i + W - 2] % mod *
           invf[K - i] % mod * invf[K - i - 1] % mod;
    ans %= mod;
  }
  cout << ans;
}
