#include <bits/stdc++.h>
using namespace std;
long long n, m, a, b;
const long long mod = 1e9 + 7;
long long ME(long long x, long long nn, long long M) {
  long long result = 1;
  while (nn > 0) {
    if (nn % 2 == 1) result = (result * x) % M;
    x = (x * x) % M;
    nn = nn / 2;
  }
  return result;
}
long long fac[1000006], ifac[1000006];
long long inv(long long x) { return ME(x, mod - 2, mod); }
long long cay(long long x, long long y) {
  if (x == y) return 1LL;
  return (y * ME(x, x - 1 - y, mod)) % mod;
}
long long C(long long x, long long y) {
  if (y > x) return 0LL;
  if (y == x) return 1LL;
  long long ret = (fac[x] * ifac[y]) % mod;
  ret = (ret * ifac[x - y]) % mod;
  return ret;
}
int main() {
  cin >> n >> m >> a >> b;
  fac[0] = 1LL;
  ifac[0] = 1LL;
  for (long long i = 1; i <= 1000002; i++) {
    fac[i] = (fac[i - 1] * i) % mod;
    ifac[i] = (ifac[i - 1] * inv(i)) % mod;
  }
  long long ans = 0LL;
  for (long long edges = 1; edges <= n - 1; edges++) {
    long long ret = 0;
    ret = C(n - 2, edges - 1);
    ret = (ret * cay(n, edges + 1)) % mod;
    ret = (ret * C(m - 1, edges - 1)) % mod;
    ret = (ret * ME(m, n - 1 - edges, mod)) % mod;
    ret = (ret * fac[edges - 1LL]) % mod;
    ans = (ans + ret) % mod;
  }
  cout << ans << endl;
  return 0;
}
