#include <bits/stdc++.h>
using namespace std;
long long inv[1000005], fact[1000005];
long long mypow(long long x, long long p) {
  long long rez = 1;
  while (p > 0) {
    if (p % 2 == 1) rez = (rez * x) % 1000000007;
    p = p / 2;
    x = (x * x) % 1000000007;
  }
  return rez;
}
long long fct(long long x, long long y) {
  if (x <= y) return 1;
  return (y * mypow(x, x - y - 1)) % 1000000007;
}
long long aran(long long n, long long k) {
  if (k >= n) return fact[n];
  if (k < 0) return 1;
  long long ans = fact[n];
  ans = (ans * inv[n - k]) % 1000000007;
  return ans;
}
long long comb(long long n, long long k) {
  if (k >= n) return 1;
  if (k <= 0) return 1;
  long long ans = fact[n];
  ans = (ans * inv[k]) % 1000000007;
  ans = (ans * inv[n - k]) % 1000000007;
  return ans;
}
void precalc() {
  inv[0] = 1;
  fact[0] = 1;
  inv[1] = 1;
  fact[1] = 1;
  for (long long i = 2; i < 1000005; i++) {
    fact[i] = (fact[i - 1] * i) % 1000000007;
    inv[i] = mypow(fact[i], 1000000007 - 2);
  }
}
int main() {
  long long n, m, ans, act, i;
  precalc();
  cin >> n >> m;
  ans = 0;
  for (i = 1; i < min(n, m + 1); i++) {
    act = comb(m - 1, i - 1);
    act = (act * aran(n - 2, i - 1)) % 1000000007;
    act = (act * fct(n, i + 1)) % 1000000007;
    act = (act * mypow(m, n - i - 1)) % 1000000007;
    ans = (ans + act) % 1000000007;
  }
  cout << ans << '\n';
  return 0;
}
