#include <bits/stdc++.h>
using namespace std;
int qpow(int x, int k) {
  int ret = 1;
  while (k) {
    if (k & 1) ret = 1LL * ret * x % 1000000007;
    k >>= 1;
    x = 1LL * x * x % 1000000007;
  }
  return ret;
}
int f[1000030], nf[1000030];
int inv[1000030];
int k, w;
void init() {
  nf[0] = f[0] = 1;
  for (int i = 1; i < 1000030; ++i) {
    f[i] = 1LL * f[i - 1] * i % 1000000007;
  }
  nf[1000030 - 1] = qpow(f[1000030 - 1], 1000000007 - 2);
  for (int i = 1000030 - 2; i >= 0; --i)
    nf[i] = 1LL * nf[i + 1] * (i + 1) % 1000000007;
  inv[1] = 1;
  for (int i = 2; i < 1000030; ++i) {
    inv[i] =
        1000000007 - 1LL * (1000000007 / i) * inv[1000000007 % i] % 1000000007;
  }
}
int main() {
  scanf("%d%d", &k, &w);
  if (k == 1) {
    puts("1");
    return 0;
  }
  init();
  int ans = 0;
  for (int t = 1; t <= k; ++t) {
    int tmp = 0;
    if (w - 1 >= t) {
      tmp = 1LL * f[k] * f[k] % 1000000007 * t % 1000000007 *
            qpow(k, w - t - 1) % 1000000007 * nf[k - t] % 1000000007 *
            nf[k - t] % 1000000007;
    } else {
      tmp = 1LL * f[k] * w % 1000000007 * f[k - t + w - 1] % 1000000007 *
            nf[k - t] % 1000000007 * nf[k - t] % 1000000007;
    }
    ans += tmp;
    if (ans >= 1000000007) ans -= 1000000007;
  }
  for (int t = 1; t <= k; ++t) {
    int tmp;
    if (t + 1 <= w - 1) {
      tmp = 1LL * f[k] * nf[k - t] % 1000000007 * t % 1000000007 * f[k] %
            1000000007 * nf[k - t - 1] % 1000000007 * qpow(k, w - t - 2) %
            1000000007;
    } else {
      tmp = 1LL * f[k] * nf[k - t] % 1000000007 * (w - 1) % 1000000007 *
            f[k - t - 1 + w - 1] % 1000000007 * nf[k - t - 1] % 1000000007;
    }
    ans += tmp;
    if (ans >= 1000000007) ans -= 1000000007;
  }
  printf("%d\n", ans);
  return 0;
}
