#include <bits/stdc++.h>
using namespace std;
long long fact[1000006];
long long inv[1000006];
long long inv_fact[1000006];
long long Pow(long long a, long long b) {
  if (b == 0) return 1;
  if (b == 1) return a % 1000000007;
  long long tmp = Pow(a, b / 2);
  tmp = (tmp * tmp) % 1000000007;
  if (b % 2 == 1) {
    tmp = (tmp * a) % 1000000007;
  }
  return tmp;
}
long long divide(long long m, long long i) {
  if (i == 1) return 1;
  m = m - i;
  if (m < 0) {
    return 0;
  }
  long long ans = fact[m + i - 1];
  ans = (ans * inv_fact[m]) % 1000000007;
  ans = (ans * inv_fact[i - 1]) % 1000000007;
  return ans;
}
long long numForests(long long n, long long i) {
  if (n == i) return 1;
  long long ans = (i * Pow(n, n - i - 1)) % 1000000007;
  return ans;
}
long long choose(long long n, long long r) {
  if (n < r) {
    return 0;
  }
  long long ans = fact[n];
  ans = (ans * inv_fact[r]) % 1000000007;
  ans = (ans * inv_fact[n - r]) % 1000000007;
  return ans;
}
int main() {
  int n, m, a, b;
  cin >> n >> m >> a >> b;
  long long ans = 0;
  fact[0] = 1;
  for (int i = 1; i < 1000006; i++) {
    fact[i] = (fact[i - 1] * i) % 1000000007;
  }
  inv[1] = 1;
  for (int i = 2; i < 1000006; ++i)
    inv[i] =
        (1000000007 - (1000000007 / i) * inv[1000000007 % i] % 1000000007) %
        1000000007;
  inv_fact[0] = 1;
  for (int i = 1; i < 1000006; i++) {
    inv_fact[i] = (inv_fact[i - 1] * inv[i]) % 1000000007;
  }
  long long fans = 0;
  for (int i = 1; i < n; i++) {
    long long ways = choose(m - 1, i - 1);
    ways = ways * choose(n - 2, i - 1);
    ways = ways % 1000000007;
    ways = ways * (fact[i - 1]);
    ways = ways % 1000000007;
    long long rest = numForests(n, i + 1);
    ans = (rest * ways) % 1000000007;
    long long tmp = Pow(m, n - 1 - i);
    ans = (ans * tmp) % 1000000007;
    fans += ans;
    fans %= 1000000007;
  }
  cout << fans << endl;
}
