#include <bits/stdc++.h>
const int p = 1e9 + 7, N = 1e6 + 5;
int s[N], v[N], c[N], d[N];
long long C(int x, int y) { return (long long)s[x] * v[y] % p * v[x - y] % p; }
long long A(int x, int y) { return (long long)s[x] * v[x - y] % p; }
int main() {
  int n, m, a, b, t;
  scanf("%d%d%d%d", &n, &m, &a, &b);
  a = 0;
  s[0] = v[0] = v[1] = c[0] = d[0] = 1;
  for (int i = 2; i <= std::max(n, m); ++i)
    v[i] = (long long)(p - p / i) * v[p % i] % p;
  for (int i = 1; i <= std::max(n, m); ++i)
    s[i] = (long long)s[i - 1] * i % p, v[i] = (long long)v[i - 1] * v[i] % p;
  for (int i = 1; i <= std::max(n, m); ++i)
    c[i] = (long long)c[i - 1] * n % p, d[i] = (long long)d[i - 1] * m % p;
  for (int i = 2; i <= std::min(m + 1, n); ++i) {
    t = i == n ? 1 : (long long)i * c[n - i - 1] % p;
    a = (a + A(n - 2, i - 2) * d[n - i] % p * t % p * C(m - 1, i - 2)) % p;
  }
  printf("%d\n", a);
  return 0;
}
