#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
inline int advPow(int a, int b) {
  int ret = 1;
  while (b) {
    if (b & 1) ret = (long long)ret * a % MOD;
    a = (long long)a * a % MOD;
    b >>= 1;
  }
  return ret;
}
const int MAXK = 1000010;
int fac[MAXK];
inline int inverse(int a) { return advPow(a, MOD - 2); }
inline int C(int N, int M) {
  if (M > N) return 0;
  if (M < 0) return 0;
  return (long long)fac[N] * inverse((long long)fac[M] * fac[N - M] % MOD) %
         MOD;
}
int K, W;
inline long long calc() {
  long long ans = 0;
  for (int len = W; len <= W + K * 2; len++) {
    if (len <= W * 2) {
      long long t = (long long)C(K, len - W) * fac[len - W] % MOD;
      ans += t * t % MOD * advPow(K, W * 2 - len) % MOD;
    } else {
      long long t = (long long)C(K - (len - W * 2), W) * fac[W] % MOD;
      ans += t * t % MOD * C(K, len - W * 2) % MOD * fac[len - W * 2] % MOD;
    }
    int w = W - 1;
    if (len <= w * 2) {
      long long t = (long long)C(K, len - w) * fac[len - w] % MOD;
      ans -= t * t % MOD * advPow(K, w * 2 - len) % MOD;
    } else {
      long long t = (long long)C(K - (len - w * 2), w) * fac[w] % MOD;
      ans -= t * t % MOD * C(K, len - w * 2) % MOD * fac[len - w * 2] % MOD;
    }
  }
  return (ans % MOD + MOD) % MOD;
}
int main() {
  scanf("%d%d", &K, &W);
  fac[0] = 1;
  for (int i = 1; i < MAXK; i++) fac[i] = (long long)fac[i - 1] * i % MOD;
  cout << calc() << endl;
}
