#include <bits/stdc++.h>
using namespace std;
long long fact[1000010] = {1}, k, w;
long long power(long long p, long long n) {
  long long ans = 1;
  for (; n; n >>= 1, p = p * p % 1000000007)
    if (n & 1) ans = ans * p % 1000000007;
  return ans;
}
long long anti(long long p) { return power(p, 1000000007 - 2); }
long long A(long long n, long long m) {
  return fact[n] * anti(fact[n - m]) % 1000000007;
}
long long sqr(long long p) { return p * p % 1000000007; }
long long work() {
  for (int i = 1; i <= k; ++i) fact[i] = fact[i - 1] * i % 1000000007;
  long long ans = 0, temp;
  for (long long L = 1; L <= k; ++L) {
    if (w - L >= 2)
      ans = (ans +
             (sqr(A(k, L) * k % 1000000007) - sqr(A(k, L + 1)) + 1000000007) *
                 power(k, w - L - 2) % 1000000007) %
            1000000007;
    if (w - L == 1)
      ans = (ans + sqr(A(k, L)) * k % 1000000007 -
             A(k, L + 1) * A(k - 1, L) % 1000000007 + 1000000007) %
            1000000007;
    if (w <= L)
      ans = (ans + A(k, L - w) * sqr(A(k - L + w, w)) % 1000000007 -
             A(k, L - w + 2) * sqr(A(k - L + w - 2, w - 1)) % 1000000007 +
             1000000007) %
            1000000007;
  }
  return ans;
}
int main() {
  cin >> k >> w;
  cout << work() << endl;
  return 0;
}
