#include <bits/stdc++.h>
using namespace std;
int mod = 1e9 + 7;
long long f_pow(long long a, long long b) {
  b = (b + mod - 1) % (mod - 1);
  long long res = 1, temp = a;
  while (b) {
    if (b & 1) res = res * temp % mod;
    temp = temp * temp % mod;
    b >>= 1;
  }
  return res;
}
long long fra[1000005];
long long inv[1000005];
void build() {
  fra[0] = 1;
  for (int i = 1; i <= 1e6; i++) {
    fra[i] = fra[i - 1] * i % mod;
  }
  inv[1000000] = f_pow(fra[1000000], mod - 2);
  for (int i = 999999; i >= 0; i--) {
    inv[i] = inv[i + 1] * (i + 1) % mod;
  }
}
long long C(long long a, long long b) {
  return fra[a] * inv[b] % mod * inv[a - b] % mod;
}
int main() {
  int n, m, a, b;
  scanf("%d %d %d %d", &n, &m, &a, &b);
  long long ans = 0;
  build();
  for (int i = 1; i <= n - 1 && i <= m; i++) {
    ans += f_pow(m, n - 1 - i) * C(n - 2, i - 1) % mod * fra[i - 1] % mod *
           (i + 1) % mod * f_pow(n, n - i - 2) % mod * C(m - 1, i - 1) % mod;
    ans %= mod;
  }
  printf("%lld\n", ans);
}
