#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7;
int add(int a, int b) {
  if ((a += b) >= P) a -= P;
  return a < 0 ? a + P : a;
}
int mul(int a, int b) { return 1ll * a * b % P; }
int kpow(int a, int b) {
  int r = 1;
  for (; b; b >>= 1, a = mul(a, a)) {
    if (b & 1) r = mul(r, a);
  }
  return r;
}
const int N = 1e6 + 7;
int jc[N], inv[N], pn[N], n, m, a, b, tmp, ans, M, pm[N];
int A(int n, int m) {
  if (m > n) return 0;
  return mul(jc[n], inv[n - m]);
}
int C(int n, int m) {
  if (m > n) return 0;
  return mul(jc[n], mul(inv[m], inv[n - m]));
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  M = 1e6;
  jc[0] = 1;
  for (int i = (1); i < (M + 1); i++) jc[i] = mul(jc[i - 1], i);
  inv[M] = kpow(jc[M], P - 2);
  for (int i = (M)-1; i >= (0); i--) inv[i] = mul(inv[i + 1], i + 1);
  cin >> n >> m >> a >> b;
  pn[0] = 1;
  for (int i = (1); i < (M + 1); i++) pn[i] = mul(pn[i - 1], n);
  pm[0] = 1;
  for (int i = (1); i < (M + 1); i++) pm[i] = mul(pm[i - 1], m);
  for (int i = (0); i < (n - 2 + 1); i++) {
    tmp = mul(A(n - 2, i), C(m - 1, i));
    tmp = mul(tmp, pm[n - i - 2]);
    if (n - i - 3 >= 0) tmp = mul(tmp, mul(pn[n - i - 3], i + 2));
    ans = add(ans, tmp);
  }
  cout << ans << "\n";
  return 0;
}
