#include <bits/stdc++.h>
using namespace std;
enum { maxn = 1000010, mod = 1000000007 };
int fac[maxn];
int A[maxn];
int Ak[maxn];
int inv[maxn];
int power(int base, int times) {
  int ans = 1;
  for (; times; times >>= 1) {
    if (times & 1) {
      ans = (long long)ans * base % mod;
    }
    base = (long long)base * base % mod;
  }
  return ans;
}
void exgcd(int a, int b, int &x, int &y) {
  if (b == 0)
    x = 1, y = 0;
  else {
    exgcd(b, a % b, y, x);
    y -= a / b * x;
  }
}
void init() {
  fac[0] = inv[0] = fac[1] = inv[1] = 1;
  for (int i = 2; i < maxn; ++i) {
    int x, y;
    exgcd(i, mod, x, y);
    fac[i] = (long long)fac[i - 1] * i % mod;
    inv[i] = (long long)inv[i - 1] * x % mod;
  }
}
int main() {
  init();
  int K, W;
  scanf("%d%d", &K, &W);
  int ans = 0;
  A[0] = 1;
  Ak[0] = 1;
  for (int i = 1; i <= K; ++i) {
    A[i] = (long long)fac[K] * inv[K - i] % mod;
    if (i != K) {
      Ak[i] = (long long)fac[K - 1] * inv[K - 1 - i] % mod;
    }
  }
  for (int i = 1; i <= K; ++i) {
    if (i < W) {
      int temp = power(K, W - i);
      ans =
          (ans +
           (long long)Ak[i - 1] * i % mod * A[i] % mod * temp % mod * 2 % mod -
           (long long)Ak[i - 1] * i % mod * Ak[i - 1] % mod * i % mod * temp %
               mod) %
          mod;
    } else {
      ans = (ans +
             (long long)A[i] * fac[K - i + W - 1] % mod * inv[K - i] % mod * W %
                 mod * 2 % mod -
             (long long)A[i] * fac[K - i + W - 1] % mod * inv[K - i] % mod) %
            mod;
      if (W >= 2) {
        ans = (ans - (long long)A[i] * fac[K - i + W - 2] % mod * inv[K - i] %
                         mod * (W - 1) % mod * (W - 1) % mod) %
              mod;
      }
    }
  }
  ans = (ans + mod) % mod;
  cout << ans << endl;
}
