#include <bits/stdc++.h>
using namespace std;
const long long p = 1000000007;
const int maxn = 1000005;
int n, m, zzt, clk;
long long fac[maxn], inv[maxn], invf[maxn];
inline long long C(int x, int y) {
  if (x < y) return 0;
  return fac[x] * invf[y] % p * invf[x - y] % p;
}
int main() {
  cin >> n >> m >> zzt >> clk;
  fac[0] = inv[1] = fac[1] = 1;
  invf[0] = invf[1] = 1;
  for (int i(2); i <= max(n, m) + 2; ++i) {
    fac[i] = fac[i - 1] * i % p;
    inv[i] = (p - p / i) * inv[p % i] % p;
    invf[i] = invf[i - 1] * inv[i] % p;
  }
  long long ANS = 0, np = inv[n], mp = 1;
  for (int i = n - 2; i >= 0; --i) {
    ANS = (ANS + C(m - 1, i) * (i + 2) % p * np % p * mp % p * fac[n - 2] % p *
                     invf[n - 2 - i] % p) %
          p;
    np = np * n % p;
    mp = mp * m % p;
  }
  cout << ANS << endl;
  return 0;
}
