#include <bits/stdc++.h>
using namespace std;
const long long M = 1e9 + 7;
const long long maxn = 1000100;
long long n, m, a, b;
long long f[maxn], rf[maxn];
long long p[maxn], q[maxn];
long long ans;
long long power(long long x, long long y) {
  long long ret = 1;
  while (y) {
    if (y & 1ll) ret = ret * x % M;
    x = x * x % M;
    y >>= 1;
  }
  return ret;
}
long long c(long long x, long long y) {
  if (x < 0 or y < 0 or y > x) return 0;
  return f[x] * rf[y] % M * rf[x - y] % M;
}
int32_t main() {
  f[0] = 1;
  rf[0] = 1;
  for (long long i = 1; i < maxn; i++) {
    f[i] = f[i - 1] * i % M;
    rf[i] = power(f[i], M - 2);
  }
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> a >> b;
  p[0] = 1;
  q[0] = 1;
  for (long long i = 1; i < n; i++) {
    p[i] = p[i - 1] * n % M;
    q[i] = q[i - 1] * m % M;
  }
  for (long long d = 1; d <= n - 1; d++) {
    ans += c(n - 1, d) * p[n - 1 - d] % M * f[d + 1] % M * rf[2] % M *
           q[n - 1 - d] % M * c(m - 1, d - 1) % M;
    ans %= M;
  }
  ans *= power(c(n, 2), M - 2) % M;
  ans %= M;
  cout << ans << endl;
  return 0;
}
