#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = x * 10 + c - '0';
    c = getchar();
  }
  return x * f;
}
const int mod = 1e9 + 7;
inline int inc(int x, int y) {
  x += y;
  return x >= mod ? x - mod : x;
}
inline int mul(int x, int y) { return (long long)x * y % mod; }
inline int qpow(int x, int y) {
  int res = 1;
  for (; y; y >>= 1, x = (long long)x * x % mod)
    if (y & 1) res = (long long)res * x % mod;
  return res;
}
const int maxn = 1e6 + 10;
int n, m, a, b, fac[maxn], inv[maxn];
inline int binom(int x, int y) {
  if (y < 0 || x < y) return 0;
  return mul(mul(fac[x], inv[y]), inv[x - y]);
}
inline int calc(int x, int y) {
  if (x == 1 || !x) return 1;
  if (x == 2) return y;
  return mul(qpow(n, x - 2), y);
}
int main() {
  n = read(), m = read(), a = read(), b = read();
  fac[0] = inv[0] = 1;
  for (int i = 1; i <= 1000000; i++) fac[i] = mul(fac[i - 1], i);
  inv[1000000] = qpow(fac[1000000], mod - 2);
  for (int i = 1000000; i >= 2; i--) inv[i - 1] = mul(inv[i], i);
  int ans = 0;
  for (int i = 0; i <= n - 2; i++) {
    int res = mul(binom(n - 2, i), fac[i]);
    res = mul(res, binom(m - 1, i));
    res = mul(res, calc(n - i - 1, i + 2));
    res = mul(res, qpow(m, n - 1 - (i + 1)));
    ans = inc(ans, res);
  }
  cout << ans << endl;
  return 0;
}
