#include <bits/stdc++.h>
#pragma warning(disable : 4996)
#pragma comment(linker, "/STACK:336777216")
using namespace std;
inline long long gcd(long long a, long long b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
inline long long power(long long a, long long n, long long m) {
  if (n == 0) return 1;
  long long p = power(a, n / 2, m);
  p = (p * p) % m;
  if (n % 2)
    return (p * a) % m;
  else
    return p;
}
const long long MOD = 1000000007;
const long long int INF = 0x3f3f3f3f;
const long long LL_INF = 0x3f3f3f3f3f3f3f3f;
const long long int N = 1000001;
long long int f[N];
long long int inf[N];
long long int prn[N];
long long int prm[N];
void precompute(long long int n, long long int m) {
  f[0] = 1;
  for (long long int i = 1; i < N; i++) f[i] = (f[i - 1] * i) % MOD;
  inf[N - 1] = power(f[N - 1], MOD - 2, MOD);
  for (long long int i = N - 2; i >= 0; i--)
    inf[i] = ((i + 1) * inf[i + 1]) % MOD;
  prn[0] = 1;
  prm[0] = 1;
  for (long long int i = 1; i < N; i++) {
    prn[i] = (prn[i - 1] * n) % MOD;
    prm[i] = (prm[i - 1] * m) % MOD;
  }
}
long long int C(long long int m, long long int k) {
  long long int c;
  c = f[m];
  c = (c % MOD * inf[k] % MOD) % MOD;
  c = (c % MOD * inf[m - k] % MOD) % MOD;
  return c;
}
int32_t main() {
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long int n, m, a, b;
  long long int x;
  long long int ans = 0;
  cin >> n >> m >> a >> b;
  precompute(n, m);
  for (long long int k = 1; k < n; k++) {
    if (k > m) break;
    x = C(m - 1, k - 1);
    x = (x % MOD * (prm[n - 1 - k]) % MOD) % MOD;
    x = (x * C(n - 2, k - 1)) % MOD;
    x = (x * (f[k - 1])) % MOD;
    if (k <= n - 2) {
      x = (x * (k + 1)) % MOD;
      x = (x * prn[n - k - 2]) % MOD;
    }
    ans = (ans + x) % MOD;
  }
  cout << ans << "\n";
  return 0;
}
