#include <bits/stdc++.h>
using namespace std;
long long N, M;
int A, B;
const long long MOD = 1e9 + 7;
long long mpw(long long n, long long m) {
  long long ret = 1;
  while (m) {
    if (m & 1) {
      ret *= n;
      ret %= MOD;
    }
    n *= n;
    n %= MOD;
    m >>= 1;
  }
  return ret;
}
long long fact[(int)1e6 + 1], ifact[(int)1e6 + 1];
long long perm(long long n, long long m) {
  return fact[n] * ifact[n - m] % MOD;
}
long long cmb(long long n, long long m) {
  return fact[n] * ifact[m] % MOD * ifact[n - m] % MOD;
}
int main() {
  cin >> N >> M >> A >> B;
  fact[0] = 1;
  for (int i = (0); i < ((int)1e6); i++) {
    fact[i + 1] = (i + 1) * fact[i] % MOD;
  }
  ifact[(int)1e6] = mpw(fact[(int)1e6], MOD - 2);
  for (int i = (int)1e6 - 1; i >= 0; i--) {
    ifact[i] = ifact[i + 1] * (i + 1) % MOD;
  }
  long long ans = 0;
  for (int e = (1); e < (N); e++) {
    if (e <= M) {
      long long f = (N - e - 2 >= 0 ? (e + 1) * mpw(N, N - e - 2) % MOD : 1);
      ans += perm(N - 2, e - 1) * f % MOD * cmb(M - 1, e - 1) % MOD *
             mpw(M, N - e - 1) % MOD;
      ans %= MOD;
    }
  }
  cout << ans << endl;
}
