#include <bits/stdc++.h>
using namespace std;
const int N = 1100000;
const long long M = 1000000007;
long long i, j, k, l, m, n, o, p, K, w, F[N], ni[N];
inline long long fastmi(long long x, long long m) {
  long long ans = 1;
  while (m) {
    if (m & 1) ans = (ans * x) % M;
    x = (x * x) % M;
    m >>= 1;
  }
  return ans;
}
inline long long get(long long l, long long r) {
  long long ans;
  if ((r < 0) || (l < 0)) return 0;
  if (l > r) return 1;
  if (l == 0) return 0;
  ans = (F[r] * ni[l - 1]) % M;
  return ans;
}
inline long long Solve() {
  long long ans1, ans2, ans, cul, cant;
  F[0] = 1;
  ni[0] = 1;
  for (i = 1; i <= K; i++) {
    F[i] = (F[i - 1] * i) % M;
    ni[i] = fastmi(F[i], M - 2);
  }
  ans = 0;
  for (i = 0; i <= K - 1; i++) {
    cant = i + 1 - w + 1;
    if (cant < 0) cant = 0;
    k = K - cant;
    o = (get(K - i, K - 1) * min(w, i + 1)) % M;
    l = w - i - 2;
    if (l < 0) l = 0;
    j = w - 1 - l;
    p = (fastmi(k, l) * get(k - j + 1, k)) % M;
    cul = (o * p) % M;
    ans += cul;
    if (ans >= M) ans -= M;
  }
  ans1 = ans;
  ans = 0;
  for (i = 0; i <= K - 1; i++) {
    cant = i + 1 - (w - 1) + 1;
    if (cant < 0) cant = 0;
    k = K - cant;
    o = (get(K - i, K - 1) * min(w - 1, i + 1)) % M;
    l = w - 1 - i - 2;
    if (l < 0) l = 0;
    j = w - 1 - l;
    p = (fastmi(k, l) * get(k - j + 1, k)) % M;
    cul = (o * p) % M;
    ans += cul;
    if (ans >= M) ans -= M;
  }
  ans2 = ans1 - ans;
  if (ans2 < 0) ans2 += M;
  ans1 = ans1 + ans1;
  if (ans1 >= M) ans1 -= M;
  ans1 -= ans2;
  if (ans1 < 0) ans1 += M;
  ans = (ans1 * K) % M;
  return ans;
}
int main() {
  cin >> K >> w;
  cout << Solve() << endl;
  fclose(stdin);
  fclose(stdout);
  return 0;
}
