#include <bits/stdc++.h>
using namespace std;
inline long long int pow(long long int x, long long int y, long long int p) {
  long long int ans = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) ans = (ans * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return ans;
}
inline long long int invmod(long long int x, long long int p) {
  return pow(x, p - 2, p);
}
const long long int N = 1000004;
long long int fact[N + 1], ifact[N + 1];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long int n, m;
  cin >> n >> m;
  fact[0] = 1;
  for (long long int i = 1; i <= N; i++)
    fact[i] = (i * fact[i - 1]) % 1000000007;
  ifact[N] = invmod(fact[N], 1000000007);
  for (long long int i = N - 1; i >= 0; i--)
    ifact[i] = ((i + 1) * ifact[i + 1]) % 1000000007;
  long long int ans = 0;
  long long int in = invmod(n, 1000000007);
  for (long long int k = 2; k <= n; k++) {
    if (m - k + 1 < 0) continue;
    long long int x = ((fact[n - 2] * ifact[n - k]) % 1000000007);
    long long int y =
        (((fact[m - 1] * ifact[k - 2]) % 1000000007) * ifact[m - k + 1]) %
        1000000007;
    long long int z = pow(m, n - k, 1000000007);
    long long int w = (k * pow(n, n - k, 1000000007)) % 1000000007;
    long long int a =
        (((((x * y) % 1000000007) * z) % 1000000007) * w) % 1000000007;
    a = (a * in) % 1000000007;
    ans = (ans + a) % 1000000007;
  }
  cout << ans;
}
