#include <bits/stdc++.h>
using namespace std;
long long int n, m, aa, bb;
long long int f[1000005], inv[1000005];
long long int fast(long long int x, long long int y) {
  long long int res = 1ll;
  while (y > 0) {
    if (y & 1) res = res * x % 1000000007;
    x = x * x % 1000000007;
    y >>= 1;
  }
  return res;
}
void init() {
  f[0] = 1ll;
  for (int i = 1; i < 1000005; i++) {
    f[i] = 1ll * i * f[i - 1] % 1000000007;
  }
  inv[1000005 - 1] = fast(f[1000005 - 1], 1000000007 - 2);
  for (int i = 1000005 - 2; i >= 0; i--) {
    inv[i] = 1ll * (i + 1) * inv[i + 1] % 1000000007;
  }
}
long long int c(long long int x, long long int y) {
  return (f[x] * inv[y] % 1000000007) * inv[x - y] % 1000000007;
}
long long int A(long long int x, long long int y) {
  if (x < y || x < 0 || y < 0) return 0;
  return f[x] * inv[x - y] % 1000000007;
}
int main() {
  init();
  while (~scanf("%lld%lld%lld%lld", &n, &m, &aa, &bb)) {
    long long int ans = 0;
    for (int i = 1; i <= m; i++) {
      long long int ed = 1ll * i;
      long long int a = A(n - 2, ed - 1);
      long long int C = c(m - 1, ed - 1);
      long long int D = fast(m, n - ed - 1);
      long long int E =
          ed == n - 1 ? 1 : (ed + 1) * fast(n, n - ed - 2) % 1000000007;
      ans = (ans + ((a * C % 1000000007) * D % 1000000007) * E % 1000000007) %
            1000000007;
    }
    printf("%lld\n", ans);
  }
  return 0;
}
