#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
const long long mod = 1e9 + 7;
const long long N = 2e6 + 1;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
long long power(long long a, long long b = mod - 2) {
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return res;
}
long long pon[N + 1], pom[N + 1], fac[N + 1], inv[N + 1];
inline long long ncr(long long x, long long y) {
  return fac[x] * inv[y] % mod * inv[x - y] % mod;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  pon[0] = pom[0] = fac[0] = inv[0] = 1;
  long long n, m;
  cin >> n >> m;
  ;
  for (long long i = (1); i <= (N); i++) pon[i] = pon[i - 1] * n % mod;
  for (long long i = (1); i <= (N); i++) pom[i] = pom[i - 1] * m % mod;
  for (long long i = (1); i <= (N); i++) fac[i] = fac[i - 1] * i % mod;
  inv[N] = power(fac[N]);
  for (long long i = (N - 1); i >= (1); i--)
    inv[i] = inv[i + 1] * (i + 1) % mod;
  long long sum = 0;
  for (long long k = (1); k <= (min(n - 1, m)); k++) {
    long long x = ncr(m - 1, k - 1) * fac[n - 2] % mod * inv[n - k - 1] % mod;
    if (k == n - 1)
      x = x * pom[n - 1 - k] % mod;
    else
      x = x * pon[n - k - 2] % mod * pom[n - 1 - k] % mod * (k + 1) % mod;
    sum = (sum + x) % mod;
  }
  cout << sum << '\n';
  ;
}
