#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 1;
const int md = 1e9 + 7;
int qpow(int a, int b) {
  int res = 1;
  while (b) {
    if (b & 1) res = 1ll * res * a % md;
    a = 1ll * a * a % md;
    b >>= 1;
  }
  return res;
}
int inv[maxn], fac[maxn];
void pre(int n = maxn - 1) {
  inv[0] = inv[1] = 1;
  fac[0] = fac[1] = 1;
  for (int i = 2; i <= n; ++i)
    fac[i] = 1ll * i * fac[i - 1] % md,
    inv[i] = 1ll * (md - md / i) * inv[md % i] % md;
  for (int i = 2; i <= n; ++i) inv[i] = 1ll * inv[i - 1] * inv[i] % md;
}
int A(int n, int m) {
  if (m > n || n < 0) return 0;
  return 1ll * fac[n] * inv[n - m] % md;
}
int SQ(int x) { return 1ll * x * x % md; }
int main() {
  pre();
  int k, w;
  while (~scanf("%d%d", &k, &w)) {
    int ans = 0;
    for (int l = 1; l <= k; ++l) {
      int res;
      if (w - l >= 2)
        res = 1ll * qpow(k, w - l - 2) *
              (1ll * SQ(A(k, l)) * SQ(k) % md - SQ(A(k, l + 1)) + md) % md;
      else if (w - l == 1)
        res = (1ll * SQ(A(k, l)) * k % md -
               1ll * A(k, l + 1) * A(k - 1, l) % md + md) %
              md;
      else
        res =
            (1ll * SQ(A(k - (l - w), w)) * A(k, l - w) % md -
             1ll * SQ(A(k - (l - w + 2), w - 1)) * A(k, l - w + 2) % md + md) %
            md;
      (ans += res) %= md;
    }
    printf("%d\n", ans);
  }
}
