#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
long long ext_gcd(long long a, long long b, long long &x, long long &y) {
  long long t, d;
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  d = ext_gcd(b, a % b, x, y);
  t = x;
  x = y;
  y = t - a / b * y;
  return d;
}
long long Invmod(long long a, long long n) {
  long long x, y;
  if (ext_gcd(a, n, x, y) != 1) {
    return -1;
  }
  return (x % n + n) % n;
}
long long qpow(long long a, long long b) {
  if (b == -1) return Invmod(a, mod);
  long long res = 1;
  while (b) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return res;
}
const int MAXN = 1e6 + 10;
long long c[MAXN], d[MAXN], e[MAXN];
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  long long n, m, a, b;
  cin >> n >> m >> a >> b;
  e[0] = 1;
  c[0] = 1;
  d[0] = 1;
  for (int i = (1); i < (n + 1); i++) {
    e[i] = e[i - 1] * i % mod;
    c[i] = (c[i - 1] * (m - i)) % mod * Invmod(i, mod) % mod;
    d[i] = (d[i - 1] * (n - i - 1)) % mod * Invmod(i, mod) % mod;
  }
  long long ans = 0;
  for (int i = (0); i < (n - 1); i++) {
    ans += (((((c[i] * (2 + i)) % mod * qpow(n, n - 3 - i)) % mod *
              qpow(m, n - 2 - i)) %
             mod * d[i]) %
            mod) *
           e[i] % mod;
    ans %= mod;
  }
  cout << ans;
  return 0;
}
