#include <bits/stdc++.h>
using namespace std;
const int N = int(1e6) + 50, P = int(1e9) + 7;
long long fac_NESC[N], rev[N], pow_NESC[N], revfac[N], w;
int k;
inline void inc(long long &x, long long y) { x = (x + y) % P; }
inline long long M(long long x, long long y) { return x * y % P; }
inline long long S(long long x) { return x * x % P; }
inline long long fpow(long long x, long long y) {
  long long r(1);
  for (; y; y >>= 1, x = M(x, x))
    if (y & 1) r = M(r, x);
  return r;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> k >> w;
  rev[1] = 1;
  for (int i = 2; i <= k; ++i) rev[i] = ((-rev[P % i] * (P / i)) % P + P) % P;
  fac_NESC[0] = 1;
  for (int i = 1; i <= k; ++i) fac_NESC[i] = M(fac_NESC[i - 1], i);
  pow_NESC[0] = fpow(k, w);
  for (int i = 1; i <= k + 20; ++i) pow_NESC[i] = M(pow_NESC[i - 1], rev[k]);
  revfac[0] = 1;
  for (int i = 1; i <= k; ++i) revfac[i] = M(revfac[i - 1], rev[i]);
  long long res(0);
  for (int t = 1; t <= k; ++t) {
    if (t <= w - 1)
      inc(res, M(M(M(t, S(fac_NESC[k])), pow_NESC[t + 1]), S(revfac[k - t])));
    if (t > w - 1)
      inc(res,
          M(M(M(fac_NESC[k], w), fac_NESC[k - t + w - 1]), S(revfac[k - t])));
    if (t + 1 <= w - 1)
      inc(res, M(M(M(t, S(fac_NESC[k])), pow_NESC[t + 2]),
                 M(revfac[k - t], revfac[k - t - 1])));
    if (t + 1 > w - 1)
      inc(res, M(M(M(fac_NESC[k], w - 1), fac_NESC[k - t + w - 2]),
                 M(revfac[k - t], revfac[k - t - 1])));
  }
  cout << res << endl;
  return 0;
}
