#include <bits/stdc++.h>
const int MAXN = 1000000, Mod = 1e9 + 7;
int Add(int x, int y) {
  x += y;
  return x >= Mod ? x - Mod : x;
}
int Sub(int x, int y) {
  x -= y;
  return x < 0 ? x + Mod : x;
}
int Mul(int x, int y) { return 1ll * x * y % Mod; }
int Quick_pow(int x, int po) {
  int Ans = 1;
  for (; po; po >>= 1, x = Mul(x, x))
    if (po & 1) Ans = Mul(Ans, x);
  return Ans;
}
int Inv(int x) { return Quick_pow(x, Mod - 2); }
int fac[MAXN + 5], ivf[MAXN + 5];
void Init() {
  fac[0] = 1;
  for (int i = 1; i <= MAXN; i++) fac[i] = Mul(fac[i - 1], i);
  ivf[MAXN] = Inv(fac[MAXN]);
  for (int i = MAXN; i >= 1; i--) ivf[i - 1] = Mul(ivf[i], i);
}
int C(int n, int m) { return n < m ? 0 : Mul(fac[n], Mul(ivf[m], ivf[n - m])); }
int A(int n, int m) { return Mul(fac[n], ivf[n - m]); }
int n, m;
int main() {
  Init();
  scanf("%d %d", &n, &m);
  int Ans = 0;
  for (int i = 2; i < n; i++) {
    int valw = Mul(C(m - 1, i - 2), Quick_pow(m, n - i));
    int shpw = Mul(A(n - 2, i - 2), Mul(i, Quick_pow(n, n - i - 1)));
    Ans = Add(Ans, Mul(valw, shpw));
  }
  Ans = Add(Ans, Mul(C(m - 1, n - 2), A(n - 2, n - 2)));
  printf("%d\n", Ans);
  return 0;
}
