#include <bits/stdc++.h>
using namespace std;
void optIO() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
const long long md = 1e9 + 7;
long long fac[2000020], inv[2000020];
long long fastexpo(long long a, long long b) {
  if (b == 0) return 1;
  long long x = fastexpo(a, b / 2);
  x = (x * x) % md;
  if (b & 1) x = (x * a) % md;
  return x;
}
long long invmod(long long a, long long b) { return fastexpo(a, b - 2) % md; }
long long fibo[2000020];
void precompute() {
  fac[0] = 1;
  for (int i = 1; i <= 2e6; ++i) fac[i] = (fac[i - 1] * i) % md;
  inv[2000000] = invmod(fac[2000000], md);
  for (int i = 2e6; i; --i) inv[i - 1] = (inv[i] * i) % md;
}
long long cmb(long long N, long long R) {
  long long num = fac[N];
  long long den = (inv[R] * inv[N - R]) % md;
  long long res = (num * den) % md;
  return res;
}
long long mult[1000020];
void solve() {
  int n, m, a, b;
  cin >> n >> m >> a >> b;
  long long sum = 0;
  mult[0] = 1;
  for (int i = 1; i < n; ++i) {
    mult[i] = ((mult[i - 1] * n) % md - fastexpo(n, i - 1) + md) % md;
  }
  for (int i = 0; i < n - 2 + 1; ++i) {
    if (i > m - 1) break;
    int ss = n - i - 2;
    long long res =
        ((cmb(m - 1, i) * fac[n - 2]) % md * invmod(fac[ss], md)) % md;
    res = ((res * mult[ss]) % md * fastexpo(m, ss)) % md;
    sum = (sum + res) % md;
  }
  cout << sum << "\n";
}
int main() {
  precompute();
  optIO();
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
