#include <bits/stdc++.h>
using namespace std;
long long k, w, a[1000011], b[1000011], ans;
const long long MOD = 1000000007;
long long _pow(long long x, long long y) {
  long long z(1);
  x %= MOD;
  for (; y; x = x * x % MOD, y >>= 1)
    if (y & 1) z = (z * x) % MOD;
  return z;
}
long long A(long long x, long long y) {
  if (x > y) return 0;
  return (a[y] * b[y - x]) % MOD;
}
long long calc(long long x) {
  if (x >= w + w) {
    long long p = x - w - w;
    return (A(w - 1, k - p - 1) * w % MOD +
            A(w - 2, k - p - 2) * (w - 1) % MOD * (k - p - w) % MOD) %
           MOD * A(x - w, k) % MOD;
  } else
    return (A(x - w, k - 1) * A(x - w - 1, k - 1) % MOD * (x - w) % MOD * 2 %
                MOD +
            _pow(A(x - w - 1, k - 1) * (x - w), 2)) %
           MOD * _pow(k, w + w - x) % MOD;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> k >> w;
  a[0] = 1, b[0] = 1;
  for (int i = 1; i <= k; ++i)
    a[i] = a[i - 1] * i % MOD, b[i] = _pow(a[i], MOD - 2);
  for (int i = 1; i <= k; ++i) (ans += calc(i + w)) %= MOD;
  cout << ans << endl;
  return 0;
}
