#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 100;
int mod = 1e9 + 7;
namespace Combi {
int fact[N], inv[N];
int bm(int b, int p, int m) {
  if (p == 0) return 1 % m;
  int t = bm(b, p / 2, m);
  t = (1ll * t * t) % m;
  if (p & 1) return 1ll * t * b % m;
  return t;
}
int C(int n, int r) {
  if (n < 0 or r < 0 or r > n) return 0;
  int ret = 1ll * fact[n] * inv[r] % mod;
  ret = 1ll * ret * inv[n - r] % mod;
  return ret;
}
int no_of_eqns(int var, int sum) { return C(sum - 1, var - 1); }
int stirling(int n, int k) {
  int ans = 0;
  for (int i = 0; i <= k; i++) {
    int x = 1ll * C(k, i) * bm(k - i, n, mod) % mod;
    if (i & 1)
      ans -= x;
    else
      ans += x;
    ans %= mod;
    ans += mod;
    ans %= mod;
  }
  ans = 1ll * ans * inv[k] % mod;
  return ans;
}
void init() {
  fact[0] = 1;
  for (int i = 1; i < N; i++) {
    fact[i] = 1ll * fact[i - 1] * i % mod;
  }
  inv[N - 1] = bm(fact[N - 1], mod - 2, mod);
  for (int i = N - 2; i >= 0; i--) {
    inv[i] = 1ll * inv[i + 1] * (i + 1) % mod;
  }
}
}  // namespace Combi
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  Combi::init();
  int n, m, a, b;
  cin >> n >> m >> a >> b;
  int ways = 0;
  for (int ej = 1; ej <= n - 1; ej++) {
    int cur_ways = 1ll * Combi::C(n - 2, ej - 1) * Combi::fact[ej - 1] % mod;
    cur_ways = 1ll * cur_ways * Combi::no_of_eqns(ej, m) % mod;
    if (ej != n - 1) cur_ways = 1ll * cur_ways * (ej + 1) % mod;
    int k = n - ej;
    if (k >= 2) cur_ways = 1ll * cur_ways * Combi::bm(n, k - 2, mod) % mod;
    int baki = k - 1;
    if (baki > 0) cur_ways = 1ll * cur_ways * Combi::bm(m, baki, mod) % mod;
    ways += cur_ways;
    ways %= mod;
  }
  cout << ways << endl;
  return 0;
}
