#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
const long long P = 1e9 + 7;
const long long inf = 1e10;
int n, m, a, b;
long long inv[N], jie[N], jv[N], ans;
inline long long C(int x, int y) { return jie[x] * jv[y] % P * jv[x - y] % P; }
inline long long A(int x, int y) { return jie[x] * jv[x - y] % P; }
inline void add(long long &x, long long y) {
  x += y;
  if (x > P) x -= P;
}
inline long long qpow(long long x, long long y) {
  long long res = 1;
  while (y) {
    if (y & 1) res = res * x % P;
    x = x * x % P, y >>= 1;
  }
  return res;
}
int main() {
  scanf("%d%d%d%d", &n, &m, &a, &b);
  inv[0] = jie[0] = jv[0] = inv[1] = jie[1] = jv[1] = 1;
  for (int i = 2; i <= n || i <= m; ++i)
    jie[i] = jie[i - 1] * i % P, inv[i] = (P - P / i) * inv[P % i] % P,
    jv[i] = jv[i - 1] * inv[i] % P;
  for (int i = 1; i <= m && i < n; ++i) {
    add(ans, A(n - 2, i - 1) * C(m - 1, i - 1) % P * qpow(m, n - i - 1) % P *
                 (i == n - 1 ? 1ll : ((i + 1) % P * qpow(n, n - i - 2) % P)) %
                 P);
  }
  printf("%lld\n", ans);
  return 0;
}
