#include <bits/stdc++.h>
int f[1000005];
int fi[1000005];
int inv[1000005];
const int M = 1000000007;
int k, w;
int powk(int n) {
  int ans = 1, t = k;
  for (; n; n >>= 1) {
    if (n & 1) ans = (1ll * ans * t) % M;
    t = (1ll * t * t) % M;
  }
  return ans;
}
int main() {
  scanf("%d%d", &k, &w);
  inv[0] = 0;
  inv[1] = 1;
  for (int i = 2; i <= k; i++)
    inv[i] = ((-1ll * inv[(M % i)] * (M / i)) % M + M) % M;
  f[0] = f[1] = 1;
  for (int i = 2; i <= k; i++) f[i] = (1ll * i * f[i - 1]) % M;
  fi[0] = fi[1] = 1;
  for (int i = 2; i <= k; i++) fi[i] = (1ll * inv[i] * fi[i - 1]) % M;
  int ans = 0;
  for (int i = 1; i <= k; i++) {
    int tmp;
    if (i <= w - 1) {
      tmp = (1ll * i * f[k]) % M;
      tmp = (1ll * tmp * f[k]) % M;
      tmp = (1ll * tmp * powk(w - i - 1)) % M;
      tmp = (1ll * tmp * fi[k - i]) % M;
      tmp = (1ll * tmp * fi[k - i]) % M;
      ans = (ans + tmp) % M;
    }
    if (i > w - 1) {
      tmp = (1ll * f[k] * w) % M;
      tmp = (1ll * tmp * f[k - i + w - 1]) % M;
      tmp = (1ll * tmp * fi[k - i]) % M;
      tmp = (1ll * tmp * fi[k - i]) % M;
      ans = (ans + tmp) % M;
    }
  }
  for (int i = 1; i <= k - 1; i++) {
    int tmp;
    if (i + 1 <= w - 1) {
      tmp = (1ll * i * f[k]) % M;
      tmp = (1ll * tmp * f[k]) % M;
      tmp = (1ll * tmp * powk(w - i - 2)) % M;
      tmp = (1ll * tmp * fi[k - i]) % M;
      tmp = (1ll * tmp * fi[k - i - 1]) % M;
      ans = (ans + tmp) % M;
    }
    if (i + 1 > w - 1) {
      tmp = (1ll * f[k] * (w - 1)) % M;
      tmp = (1ll * tmp * f[k - i + w - 2]) % M;
      tmp = (1ll * tmp * fi[k - i]) % M;
      tmp = (1ll * tmp * fi[k - i - 1]) % M;
      ans = (ans + tmp) % M;
    }
  }
  printf("%d\n", ans);
}
