#include <bits/stdc++.h>
using namespace std;
int f[1000002];
int lgPow(int a, int b) {
  int ret = 1;
  for (int i = 0; (1 << i) <= b; ++i, a = (1LL * a * a) % 1000000007)
    if (b & (1 << i)) ret = (1LL * ret * a) % 1000000007;
  return ret;
}
int C(int n, int k) {
  if (n == k || k == 0) return 1;
  if (k == 1) return n;
  int ret = (1LL * f[n] * lgPow(f[k], 1000000007 - 2)) % 1000000007;
  ret = (1LL * ret * lgPow(f[n - k], 1000000007 - 2)) % 1000000007;
  return ret;
}
int Cnt(int x) {
  if (x < 2) return 1;
  return lgPow(x, x - 2);
}
int main() {
  int n, m, a, b;
  scanf("%d%d%d%d", &n, &m, &a, &b);
  f[0] = 1;
  for (int i = 1; i < 1000002 - 1; ++i)
    f[i] = (1LL * f[i - 1] * i) % 1000000007;
  int ans = 0;
  for (int l = 1; l <= m && l < n; ++l) {
    int add = (1LL * C(m - 1, l - 1) * f[n - 2]) % 1000000007;
    add = (1LL * add * lgPow(f[n - l - 1], 1000000007 - 2)) % 1000000007;
    if (n - l - 2 >= 0)
      add = (1LL * add * ((1LL * lgPow(n, n - l - 2) * (l + 1)) % 1000000007)) %
            1000000007;
    ans = (1LL * add * lgPow(m, n - l - 1) + ans) % 1000000007;
  }
  printf("%d\n", ans);
  return 0;
}
