#include <bits/stdc++.h>
using namespace std;
const int maxn = (int)1e6 + 100;
const int mod = (int)1e9 + 7;
const int P = (int)227;
int n, m, first[maxn], inv[maxn];
int binpow(int a, int b) {
  int res = 1;
  while (b) {
    if (b & 1) res = (res * 1ll * a) % mod;
    b >>= 1;
    a = (a * 1ll * a) % mod;
  }
  return res;
}
void mul(int &a, int b) { a = (a * 1ll * b) % mod; }
int Mul(int a, int b) { return (a * 1ll * b) % mod; }
void add(int &a, int b) {
  a += b;
  if (a >= mod) a -= mod;
  if (a < 0) a += mod;
}
int ans = 0;
int C(int n, int k) {
  if (k > n || n < 0 || k < 0) return 0;
  return Mul(Mul(first[n], inv[k]), inv[n - k]);
}
int A(int n, int k) {
  if (k > n || n < 0 || k < 0) return 0;
  return Mul(first[n], inv[n - k]);
}
int main() {
  cin >> n >> m;
  first[0] = inv[0] = 1;
  for (int i = (1); i <= (maxn - 1); ++i) {
    first[i] = Mul(first[i - 1], i);
    inv[i] = binpow(first[i], mod - 2);
  }
  for (int len = (1); len <= (n - 1); ++len) {
    int num1 = C(m - 1, len - 1);
    int num2 = A(n - 2, len - 1);
    mul(num1, num2);
    int x = n - len - 1;
    if (len < n - 1) {
      int cur = len + 1;
      mul(cur, binpow(n, x - 1));
      mul(num1, cur);
    }
    mul(num1, binpow(m, x));
    add(ans, num1);
  }
  cout << ans;
}
