#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 1 << 20;
int inv[maxn], fact[maxn], finv[maxn], pown;
inline int neg(const int& x) { return x * (mod - 1LL) % mod; }
inline int sub(const int& a, const int& b) {
  return a < b ? a - b + mod : a - b;
}
inline int add(const int& a, const int& b) { return sub(a, mod - b); }
inline int mul(const int& a, const int& b) { return 1LL * a * b % mod; }
inline int mul(const int& a, const int& b, const int& c) {
  return mul(mul(a, b), c);
}
inline int mul(const int& a, const int& b, const int& c, const int& d) {
  return mul(mul(a, b), mul(c, d));
}
inline int bino(const int& a, const int& b) {
  return mul(fact[a], finv[b], finv[a - b]);
}
inline int binv(const int& a, const int& b) {
  return mul(finv[a], fact[b], fact[a - b]);
}
inline void init(int n = maxn) {
  inv[0] = inv[1] = fact[0] = fact[1] = finv[0] = finv[1] = 1;
  for (int i = 2; i ^ n; ++i) {
    inv[i] = mul(inv[mod % i], mod - mod / i);
    fact[i] = mul(fact[i - 1], i);
    finv[i] = mul(finv[i - 1], inv[i]);
  }
}
inline int fpow(int a, int n) {
  if (n < 0) n = n * (2LL - mod) % (mod - 1);
  int ret = 1;
  while (n) {
    if (n & 1) ret = mul(ret, a);
    a = mul(a, a);
    n >>= 1;
  }
  return ret;
}
int main() {
  init();
  int n, m, a, b;
  cin >> n >> m >> a >> b;
  int nm = mul(n, m);
  int nn = fpow(n, mod - 2);
  int res = 0;
  for (int x = 2; x <= min(n, m + 1); ++x)
    res = add(res, mul(mul(fpow(nm, n - x), x, nn, bino(m - 1, x - 2)),
                       fact[n - 2], finv[n - x]));
  cout << res << endl;
}
