#include <bits/stdc++.h>
using namespace std;
int n, m, a, b;
long long pown[1000005], powm[1000005], fact[1000006], invf[1000006];
long long power(long long a, long long b, long long m = 1000000007) {
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = (res * a) % m;
    a = (a * a) % m;
    b >>= 1;
  }
  return res;
}
void precalc() {
  pown[0] = powm[0] = fact[0] = 1;
  for (int i = 1; i <= n; i++) pown[i] = (pown[i - 1] * n) % 1000000007;
  for (int i = 1; i <= n; i++) powm[i] = (powm[i - 1] * m) % 1000000007;
  for (int i = 1; i <= 1000003; i++) fact[i] = (fact[i - 1] * i) % 1000000007;
  for (int i = 0; i < 1000004; i++) invf[i] = power(fact[i], 1000000007 - 2);
}
long long nPr(int n, int r) {
  long long res = fact[n] * invf[n - r];
  return res % 1000000007;
}
long long nCr(int n, int r) {
  long long res = (fact[n] * invf[n - r]) % 1000000007;
  res = res * invf[r];
  return res % 1000000007;
}
long long Cayley(int n, int k) {
  if (n == k) return 1;
  return (pown[n - k - 1] * k) % 1000000007;
}
int main() {
  cin >> n >> m >> a >> b;
  precalc();
  long long ans = 0;
  for (int e = 1; e <= n - 1; e++) {
    if (e > m) break;
    long long temp = (powm[n - 1 - e] * Cayley(n, e + 1)) % 1000000007;
    temp = (temp * nPr(n - 2, e - 1)) % 1000000007;
    temp = (temp * nCr(m - 1, e - 1)) % 1000000007;
    ans += temp;
    ans %= 1000000007;
  }
  cout << ans << endl;
}
