#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long pot(long long base, long long exp) {
  if (exp < 0) {
    cout << "ERRRO\n";
    return 0;
  }
  if (exp == 0) return 1;
  if (exp % 2 != 0) {
    return (base % MOD * pot(base, exp - 1) % MOD) % MOD;
  }
  long long tot = 1;
  tot = pot(base, exp / 2);
  tot = (tot % MOD * tot % MOD) % MOD;
  return tot;
}
long long inv(long long num) { return pot(num, MOD - 2); }
long long fact[1023456], factinv[1023456];
long long getC(long long n, long long m) {
  if (m > n || m < 0 || n < 0) return 0LL;
  long long tot = fact[n] * factinv[m];
  tot %= MOD;
  tot *= factinv[n - m];
  tot %= MOD;
  return tot;
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  long long n, m, a, b;
  cin >> n >> m >> a >> b;
  long long tot = 1;
  for (long long i = 1; i <= 1023456; ++i) {
    fact[i - 1] = tot;
    factinv[i - 1] = inv(tot);
    tot *= i;
    tot %= MOD;
  }
  long long resp = 0;
  long long n2;
  for (long long i = 2; i <= n; ++i) {
    long long auxresp = getC(m - 1, i - 2) % MOD;
    if (i < n) {
      auxresp *= i;
      auxresp %= MOD;
      auxresp *= pot(n, n - i - 1);
      auxresp %= MOD;
    }
    auxresp *= pot(m, n - i);
    auxresp %= MOD;
    auxresp *= getC(n - 2, i - 2);
    auxresp %= MOD;
    auxresp *= fact[i - 2];
    auxresp %= MOD;
    resp += auxresp;
    resp %= MOD;
  }
  cout << resp << endl;
}
