#include <bits/stdc++.h>
using namespace std;
long long int mod = 1000000007;
long long int power(long long int a, long long int p) {
  long long int res = 1;
  for (; p; p >>= 1) {
    if (p % 2) res = (res * a) % mod;
    a = (a * a) % mod;
  }
  return res;
}
long long int fact[1005000];
long long int inv[1005000];
long long int fact_inv[1005000];
long long int k, w;
long long int res = 0;
inline long long int P(long long int n, long long int m) {
  if (m > n) return 0;
  return fact[n] * fact_inv[n - m] % mod;
}
int main() {
  cin >> k >> w;
  fact[0] = inv[0] = fact_inv[0] = 1;
  for (long long int i = 0; i < ((long long int)(1005000)); ++i)
    if (i) fact[i] = (fact[i - 1] * i) % mod;
  for (long long int i = 0; i < ((long long int)(1005000)); ++i)
    if (i) inv[i] = power(i, mod - 2) % mod;
  for (long long int i = 0; i < ((long long int)(1005000)); ++i)
    if (i) fact_inv[i] = fact_inv[i - 1] * inv[i] % mod;
  long long int res = 0;
  for (long long int len = 1; len <= k; len++) {
    long long int left = w - len;
    if (1 <= left) {
      res =
          (res + P(k, len) * P(k, len) % mod * power(k, left - 1) % mod * len) %
          mod;
    } else {
      res = (res + P(k, len) * P(k - len + w - 1, w - 1) % mod * w) % mod;
    }
    if (2 <= left) {
      res = (res +
             P(k, len) * P(k, len + 1) % mod * power(k, left - 2) % mod * len) %
            mod;
    } else {
      res = (res + P(k, len) * P(k - len + w - 2, w - 1) % mod * (w - 1)) % mod;
    }
  }
  cout << res << endl;
}
