#include <bits/stdc++.h>
using namespace std;
long long n, m, k, y, z, l, i, j, x;
long long q, ans, w[100500], d[100500], p[100500], a[200500];
pair<long long, long long> b[200500];
map<long long, long long> f;
long long fac[2005000], invfac[2005000];
long long binpow(long long x, long long y) {
  if (y == 0) return 1;
  long long tmp = binpow(x, y / 2);
  tmp = tmp * tmp % 1000000007;
  if (y % 2 == 0) return tmp;
  return x * tmp % 1000000007;
}
long long C(long long n, long long k) {
  if (n < k || k < 0) {
    return 0;
  }
  return fac[n] * invfac[k] % 1000000007 * invfac[n - k] % 1000000007;
}
long long T(long long n, long long k) {
  if (n == k) return 1;
  return k * binpow(n, n - k - 1) % 1000000007;
}
int main() {
  long long x, y;
  fac[0] = invfac[0] = 1;
  for (int i = 1; i <= 2000000; i++) {
    fac[i] = fac[i - 1] * i % 1000000007;
    invfac[i] = binpow(fac[i], 1000000007 - 2);
  }
  cin >> n >> m >> x >> y;
  long long ans = 0;
  for (int sz = 1; sz <= m; sz++) {
    if (n - sz - 1 < 0) break;
    ans += C(m - 1, sz - 1) * C(n - 2, sz - 1) % 1000000007 * T(n, sz + 1) %
           1000000007 * binpow(m, n - sz - 1) % 1000000007 * fac[sz - 1] %
           1000000007;
  }
  cout << ans % 1000000007 << endl;
  return 0;
}
