#include <bits/stdc++.h>
const int maxn = 1000010;
const int P = 1000000007;
int k, w;
int f[maxn], g[maxn];
int pow(int x, int y) {
  int e = 1;
  while (y) {
    if (y & 1) e = (long long)e * x % P;
    x = (long long)x * x % P;
    y >>= 1;
  }
  return e;
}
int main() {
  int i, d, t, s = 0;
  scanf("%d%d", &k, &w);
  for (f[0] = g[0] = 1, i = 1; i <= k; ++i)
    f[i] = (long long)f[i - 1] * i % P, g[i] = pow(f[i], P - 2);
  for (t = 1; t <= k; ++t) {
    d = (long long)f[k] * g[k - t] % P * g[k - t] % P;
    if (t <= w - 1)
      s = ((long long)d * t % P * f[k] % P * pow(k, w - t - 1) + s) % P;
    else
      s = ((long long)d * w % P * f[k - t + w - 1] + s) % P;
  }
  for (t = 1; t < k; ++t) {
    d = (long long)f[k] * g[k - t] % P * g[k - t - 1] % P;
    if (t + 1 <= w - 1)
      s = ((long long)d * t % P * f[k] % P * pow(k, w - t - 2) + s) % P;
    else
      s = ((long long)d * (w - 1) % P * f[k - t + w - 2] + s) % P;
  }
  printf("%d", s);
  return 0;
}
