#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
long long fac[1000005];
long long invFac[1000005];
inline long long power(long long x, long long y) {
  long long res = 1;
  for (;;) {
    if (y & 1) res = (res * x) % MOD;
    y >>= 1;
    if (!y) break;
    x = (x * x) % MOD;
  }
  return res;
}
long long getC(int n, int k) {
  if (n < 0 || k < 0 || k > n || n > 1000003) {
    return 0;
  }
  return (((fac[n] * invFac[k]) % MOD) * invFac[n - k]) % MOD;
}
long long calcTr(long long k, long long n) {
  long long p = (fac[k - 2] * getC(n - 2, k - 2)) % MOD;
  if (n == k) {
    return p;
  }
  return (p * ((k * power(n, n - k - 1)) % MOD)) % MOD;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, m, xx, xxx;
  cin >> n >> m >> xx >> xxx;
  fac[0] = 1;
  invFac[0] = 1;
  for (int i = (int)1; i <= (int)(1000002); i++) {
    fac[i] = (fac[i - 1] * i) % MOD;
    invFac[i] = power(fac[i], MOD - 2);
  }
  long long res = 0;
  for (int k = (int)1; k <= (int)(n - 1); k++) {
    res += (((getC(m - 1, k - 1) * calcTr(k + 1, n)) % MOD) *
            power(m, n - 1 - k)) %
           MOD;
    res %= MOD;
  }
  cout << res << "\n";
  return 0;
}
