#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
inline int add(int a, int b) {
  a += b;
  if (a >= MOD) a -= MOD;
  return a;
}
inline int sub(int a, int b) {
  a -= b;
  if (a < 0) a += MOD;
  return a;
}
inline int mul(int a, int b) { return (int)((long long)a * b % MOD); }
inline int binpow(int a, int b) {
  int res = 1;
  while (b > 0) {
    if (b & 1) res = mul(res, a);
    a = mul(a, a);
    if (a == 1) break;
    b /= 2;
  }
  return res;
}
inline int inv(int a) { return binpow(a, MOD - 2); }
const int N = 1e6 + 2;
int n, m, a, b, fac[N], invfac[N], pwn[N], pwm[N];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> a >> b;
  fac[0] = 1;
  for (int i = 1; i < N; ++i) fac[i] = mul(fac[i - 1], i);
  for (int i = 0; i < N; ++i) invfac[i] = inv(fac[i]);
  pwn[0] = pwm[0] = 1;
  for (int i = 1; i < N; ++i) {
    pwn[i] = mul(pwn[i - 1], n);
    pwm[i] = mul(pwm[i - 1], m);
  }
  int ans = 0;
  for (int k = 1; k <= n - 1 && k <= m; ++k) {
    int res = 1;
    res = mul(res, k + 1);
    res = mul(res, pwn[n - 1 - k]);
    res = mul(res, invfac[n - k - 1]);
    res = mul(res, fac[m - 1]);
    res = mul(res, invfac[k - 1]);
    res = mul(res, invfac[m - k]);
    res = mul(res, pwm[n - 1 - k]);
    ans = add(ans, res);
  }
  ans = mul(ans, fac[n]);
  ans = mul(ans, inv(n - 1));
  ans = mul(ans, inv(mul(n, n)));
  cout << ans << "\n";
  return 0;
}
