#include <bits/stdc++.h>
using namespace std;
long long fac[1010001], ifac[1010001];
long long pow1(long long x, long long y) {
  long long ans = 1;
  while (y > 0) {
    if (y & 1LL) ans = ans * x;
    ans %= 1000000007;
    x = x * x;
    x %= 1000000007;
    y = y / 2;
  }
  return ans;
}
long long inv(long long x) { return pow1(x, 1000000007 - 2); }
void preprocess(void) {
  fac[0] = 1;
  for (auto i = (1); i < 1010001; i++) {
    fac[i] = (i * fac[i - 1]) % 1000000007;
  }
  for (auto i = (0); i < 1010001; i++) {
    ifac[i] = inv(fac[i]);
  }
  return;
}
long long C(long long x, long long y) {
  long long ans = 1;
  if (y > x) {
    assert(false);
  }
  ans *= fac[x];
  ans *= ifac[y];
  ans %= 1000000007;
  ans *= ifac[x - y];
  ans %= 1000000007;
  return ans;
}
long long C1(long long x, long long y) {
  if (x == 0) {
    if (y == 0)
      return 1;
    else
      return 0;
  }
  if (y >= 0) {
    long long kk = C(-x + y - 1, y);
    if (y % 2) kk *= -1;
    return kk;
  } else if (y <= x) {
    long long kk = C(-y - 1, x - y);
    if ((x - y) % 2) kk *= -1;
    return kk;
  } else
    return 0;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.precision(20);
  preprocess();
  int n, m, a, b;
  cin >> n >> m >> a >> b;
  long long ans = 0;
  for (auto k = (1); k < min(n, m + 1); k++) {
    long long kk = 1;
    kk = kk * C1(-k, m - k) * ((m - k) % 2 == 0 ? 1 : -1);
    ;
    kk %= 1000000007;
    kk = kk * C(n - 2, k - 1);
    kk %= 1000000007;
    kk = kk * pow1(m, n - k - 1);
    kk %= 1000000007;
    kk = kk * fac[k - 1];
    kk %= 1000000007;
    kk *= ((k + 1) * pow1(n, n - k)) % 1000000007;
    kk %= 1000000007;
    kk *= inv(pow1(n, 2));
    kk %= 1000000007;
    kk %= 1000000007;
    ans += kk;
    ans %= 1000000007;
  }
  cout << ans << endl;
}
