#include <bits/stdc++.h>
using namespace std;
const int Mod = 1000000007;
long long Pow(long long A, long long B) {
  if (!B) return 1;
  long long T = Pow(A * A % Mod, B / 2);
  if (B & 1) T = T * A % Mod;
  return T;
}
long long A(long long M, long long N) {
  long long S = 1;
  for (int i = 0; i < N; i++) S = S * (M - i) % Mod;
  return S;
}
int main() {
  long long K, W;
  cin >> K >> W;
  long long Ans = 0;
  for (long long L = W + 1, P0 = 1, P1 = 1; L <= W + K && L < W * 2; L++) {
    long long Temp = Pow(K, 2 * W - L);
    P0 = P0 * (K - (L - W) + 1) % Mod;
    P1 = P1 * (K - (L - W)) % Mod;
    Temp = Temp * (Pow(P0, 2) - Pow(P1, 2)) % Mod;
    if (Temp < 0) Temp += Mod;
    Ans = (Ans + Temp) % Mod;
  }
  if (W <= K)
    for (long long L = W * 2, P0 = 1, P1 = A(K, W), P2 = K * (K - 1) % Mod,
                   P3 = A(K - 2, W - 1);
         L <= W + K; L++) {
      long long X = P0 * Pow(P1, 2) % Mod;
      long long Y = P2 * Pow(P3, 2) % Mod;
      Ans = (Ans + X - Y) % Mod;
      if (Ans < 0) Ans += Mod;
      P0 = P0 * (K - (L - W * 2)) % Mod;
      P2 = P2 * (K - (L - W * 2) - 2) % Mod;
      P1 = P1 * Pow(K - (L - W * 2), Mod - 2) % Mod * (K - (L - W)) % Mod;
      P3 = P3 * Pow(K - (L - W * 2) - 2, Mod - 2) % Mod * (K - (L - W) - 1) %
           Mod;
    }
  cout << Ans << endl;
  return 0;
}
