#include <bits/stdc++.h>
using namespace std;
const int Inf = (1 << 30) - 1;
const long long lInf = (1LL << 62) - 1;
const long long Mod = 1000000007;
long long fac[1000010];
long long inv[1000010];
long long powm[1000010];
long long pown[1000010];
int a, b;
long long n, m;
long long fpow(long long a, long long b, long long Mod) {
  a %= Mod;
  b %= Mod;
  long long mul = 1;
  while (b) {
    if (b & 1) (mul *= a) %= Mod;
    (a *= a) %= Mod;
    b >>= 1;
  }
  return mul;
}
void init() {
  int tmp = max(n, m);
  fac[0] = fac[1] = 1;
  for (int i = 2; i <= tmp; ++i) fac[i] = fac[i - 1] * i % Mod;
  inv[tmp] = fpow(fac[tmp], Mod - 2, Mod);
  for (int i = tmp; i >= 1; --i) inv[i - 1] = inv[i] * i % Mod;
  powm[0] = pown[0] = 1;
  for (int i = 1; i <= tmp; ++i)
    powm[i] = powm[i - 1] * m % Mod, pown[i] = pown[i - 1] * n % Mod;
}
long long A(int x, int y) {
  if (x - y < 0 || x < 0) return 0;
  return fac[x] * inv[x - y] % Mod;
}
long long C(int x, int y) {
  if (x - y < 0 || x < 0 || y < 0) return 0;
  return fac[x] * inv[y] % Mod * inv[x - y] % Mod;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> a >> b;
  init();
  long long ans = 0;
  for (long long i = 1; i <= n - 1; ++i) {
    long long mul =
        A(n - 2, i - 1) * C(m - 1, i - 1) % Mod * powm[n - i - 1] % Mod;
    if (n - i - 2 >= 0) (mul *= (i + 1) * pown[n - i - 2] % Mod) %= Mod;
    (ans += mul) %= Mod;
  }
  cout << ans << endl;
  return 0;
}
