#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
long long mul[1000010], inv[1000010];
long long pw(long long a, long long b) {
  long long ret = 1;
  while (b > 0) {
    if (b & 1) ret = (ret * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return ret;
}
long long C(int n, int m) {
  if (m > n) return 0;
  if (m == n) return 1;
  if (m == 0) return 1;
  if (n < m || n < 0 || m < 0) return 0;
  long long t1 = mul[n];
  long long t2 = inv[n - m] * inv[m];
  return ((t1 % mod) * (t2 % mod)) % mod;
}
long long A(int n, int m) {
  if (n < 0 || m < 0) return 0;
  if (m > n) return 0;
  long long t1 = mul[n];
  long long t2 = inv[n - m];
  return ((t1 % mod) * (t2 % mod)) % mod;
}
void init() {
  mul[0] = 1;
  inv[0] = 1;
  mul[1] = 1;
  inv[1] = 1;
  for (int i = 2; i <= 1000000; ++i) {
    mul[i] = (mul[i - 1] * i) % mod;
    inv[i] = (inv[i - 1] * pw(i, mod - 2)) % mod;
  }
}
int main() {
  int n, m, a, b;
  scanf("%d%d%d%d", &n, &m, &a, &b);
  init();
  long long ans = 0;
  for (int k = 0; k <= n - 2; ++k) {
    long long t1 = (A(n - 2, k) * C(m - 1, k)) % mod;
    long long t2 = 0;
    if (k == n - 2) {
      t2 = (pw(m, n - 1 - k - 1)) % mod;
    } else {
      t2 = ((((k + 2) * pw(n, n - k - 3)) % mod) * pw(m, n - 1 - k - 1)) % mod;
    }
    ans = (ans + t1 * t2) % mod;
  }
  cout << ans << endl;
}
