#include <bits/stdc++.h>
using namespace std;
const long long N = 1e6 + 6;
const long long mod = 1e9 + 7;
long long fact[N];
long long rev[N];
long long ans = 0;
long long n, m, a, b;
long long power(long long a, long long b) {
  if (!b) {
    return 1;
  }
  long long ans = power(a, b / 2);
  ans = ans * ans;
  ans = ans % mod;
  if (b % 2) {
    ans = ans * a;
    ans = ans % mod;
  }
  return ans;
}
void pre() {
  fact[0] = 1;
  rev[0] = 1;
  for (long long i = 1; i < N; i++) {
    fact[i] = fact[i - 1] * i;
    fact[i] %= mod;
    rev[i] = power(fact[i], mod - 2);
  }
}
long long choose(long long a, long long b) {
  if (a > b) {
    return 0;
  }
  long long ans = fact[b];
  ans = ans * rev[a];
  ans = ans % mod;
  ans = ans * rev[b - a];
  ans = ans % mod;
  return ans;
}
int main() {
  pre();
  cin >> n >> m >> a >> b;
  for (int edge = 1; edge < n; edge++) {
    long long tmp = choose(edge - 1, m - 1);
    tmp = tmp * choose(edge - 1, n - 2);
    tmp = tmp % mod;
    tmp = tmp * fact[edge - 1];
    tmp = tmp % mod;
    if (edge != n - 1) {
      tmp = tmp * (edge + 1);
      tmp = tmp % mod;
      tmp = tmp * power(n, n - (edge + 1) - 1);
      tmp = tmp % mod;
    }
    tmp = tmp % mod;
    tmp = tmp * power(m, n - 1 - edge);
    tmp = tmp % mod;
    ans += tmp;
    ans = ans % mod;
  }
  cout << ans << endl;
}
