#include <bits/stdc++.h>
using namespace std;
long long n, m, ans;
long long f[1000005], inv[1000005];
inline long long POW(long long a, long long b = 1000000007 - 2,
                     long long ans = 1) {
  for (; b; b >>= 1, a = a * a % 1000000007)
    if (b & 1) ans = ans * a % 1000000007;
  return ans;
}
inline long long C(long long n, long long m) {
  if (n < m) return 0;
  return f[n] * inv[m] % 1000000007 * inv[n - m] % 1000000007;
}
inline long long F(long long x, long long y) {
  if (x - y - 1 < 0) return 1;
  return y * POW(x, x - y - 1) % 1000000007;
}
inline long long cal(long long x) {
  return C(n - 2, x - 1) * f[x - 1] % 1000000007 * C(m - 1, x - 1) %
         1000000007 * POW(m, n - x - 1) % 1000000007 * F(n, x + 1) % 1000000007;
}
void init(long long n) {
  f[0] = inv[0] = 1;
  for (long long i = 1; i <= n; i++) f[i] = f[i - 1] * i % 1000000007;
  inv[n] = POW(f[n]);
  for (long long i = n - 1; i; i--) inv[i] = inv[i + 1] * (i + 1) % 1000000007;
}
signed main() {
  cin >> n >> m;
  init(max(n, m));
  for (long long i = 1; i < n; i++) ans = (ans + cal(i)) % 1000000007;
  cout << ans;
}
