#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int MAXN = 1000005;
int n, m, fac[MAXN], inv[MAXN];
inline int qpow(int a, int b) {
  int re = 1;
  for (; b; a = 1ll * a * a % mod, b >>= 1)
    if (b & 1) re = 1ll * re * a % mod;
  return re;
}
inline int C(int N, int M) {
  return N < M ? 0 : 1ll * fac[N] * inv[N - M] % mod * inv[M] % mod;
}
inline int A(int N, int M) {
  return N < M ? 0 : 1ll * fac[N] * inv[N - M] % mod;
}
inline void pre(int N) {
  fac[0] = inv[0] = fac[1] = inv[1] = 1;
  for (int i = 2; i <= N; ++i)
    fac[i] = 1ll * fac[i - 1] * i % mod,
    inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
  for (int i = 2; i <= N; ++i) inv[i] = 1ll * inv[i - 1] * inv[i] % mod;
}
int main() {
  scanf("%d%d", &n, &m);
  pre(max(n, m));
  int Ans = 0;
  for (int p = 1; p < n; ++p) {
    int ans = 1ll * C(m - 1, p - 1) * A(n - 2, p - 1) % mod *
              (p == n - 1 ? 1ll : 1ll * (p + 1) * qpow(n, n - p - 2) % mod) %
              mod * qpow(m, n - 1 - p) % mod;
    Ans = (Ans + ans) % mod;
  }
  printf("%d\n", (Ans + mod) % mod);
}
