#include <bits/stdc++.h>
using namespace std;
const int N = 1001000, p = 1e9 + 7;
int fac[N], inv[N], pwn[N], pwm[N];
int n, m;
inline int C(int nn, int mm) {
  if (nn < mm) return 0;
  return (long long)fac[nn] * inv[mm] % p * inv[nn - mm] % p;
}
inline int P(int nn, int mm) {
  if (nn < mm) return 0;
  return (long long)fac[nn] * inv[nn - mm] % p;
}
inline int cayley(int t) {
  if (n - 1 < t) return 1;
  return (long long)t * pwn[n - 1 - t] % p;
}
inline int qpow(int A, int B) {
  int res = 1;
  while (B) {
    if (B & 1) res = (long long)res * A % p;
    A = (long long)A * A % p, B >>= 1;
  }
  return res;
}
int main() {
  scanf("%d%d", &n, &m);
  pwn[0] = pwm[0] = fac[0] = 1;
  int L = max(n, m);
  for (int i = 1; i <= L; ++i) {
    fac[i] = (long long)fac[i - 1] * i % p;
    pwn[i] = (long long)pwn[i - 1] * n % p;
    pwm[i] = (long long)pwm[i - 1] * m % p;
  }
  inv[L] = qpow(fac[L], p - 2);
  for (int i = L; i; --i) inv[i - 1] = (long long)inv[i] * i % p;
  int ans = 0;
  for (int i = 0; i <= n - 2; ++i)
    ans = (ans + (long long)P(n - 2, i) * C(m - 1, i) % p * pwm[n - (i + 2)] %
                     p * cayley(i + 2)) %
          p;
  printf("%d\n", ans);
  return 0;
}
