#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T& x) {
  static char c;
  static int f;
  for (c = getchar(), f = 1; c < '0' || c > '9'; c = getchar())
    if (c == '-') f = -f;
  for (x = 0; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + (c & 15);
  x *= f;
}
template <typename T>
void write(T x) {
  static char q[65];
  int cnt = 0;
  if (x < 0) putchar('-'), x = -x;
  q[++cnt] = x % 10, x /= 10;
  while (x) q[++cnt] = x % 10, x /= 10;
  while (cnt) putchar(q[cnt--] + '0');
}
const int mod = 1000000007, maxn = 1000005;
int mo(const int x) { return x >= mod ? x - mod : x; }
int iac[maxn], fac[maxn], _n[maxn], _m[maxn];
int main() {
  int n, m, a, b;
  read(n), read(m), read(a), read(b);
  int mx = max(n, m);
  iac[0] = iac[1] = fac[0] = fac[1] = _n[1] = _m[0] = 1;
  _m[1] = m;
  for (int i = 2; i <= mx; ++i)
    iac[i] = 1ll * (mod - mod / i) * iac[mod % i] % mod;
  _n[0] = iac[n];
  for (int i = 2; i <= mx; ++i)
    iac[i] = 1ll * iac[i - 1] * iac[i] % mod,
    fac[i] = 1ll * fac[i - 1] * i % mod, _m[i] = 1ll * _m[i - 1] * m % mod,
    _n[i] = 1ll * _n[i - 1] * n % mod;
  int ans = 0;
  for (int i = 1; i <= n - 1 && i <= m; ++i)
    ans = mo(ans + 1ll * (i + 1) * _n[n - 1 - i] % mod * _m[n - 1 - i] % mod *
                       iac[n - 1 - i] % mod * iac[m - i] % mod * iac[i - 1] %
                       mod);
  ans = 1ll * ans * fac[n - 2] % mod * fac[m - 1] % mod;
  write(ans), putchar('\n');
  return 0;
}
