#include <bits/stdc++.h>
using namespace std;
const int INF = 1000 * 1000 * 1000;
const long long LINF = 1LL * INF * INF;
const int MAX = 100010;
const long double PI = acos(-1.);
const double EPS = 1e-6;
long long mod = 1000LL * 1000 * 1000 + 7;
long long n, m, a, b;
long long binpow(long long a, long long x) {
  long long res = 1;
  while (x) {
    if (x & 1) {
      res *= a;
      res %= mod;
    }
    a *= a;
    a %= mod;
    x /= 2;
  }
  return res;
}
long long ober(long long x) { return binpow(x, mod - 2); }
long long fact[1000006];
long long oberfact[1000006];
long long A(long long n, long long k) {
  return fact[n] * oberfact[n - k] % mod;
}
long long C(long long n, long long k) {
  return fact[n] * oberfact[k] % mod * oberfact[n - k] % mod;
}
long long first(long long n, long long m) {
  return m * binpow(n, n - m - 1) % mod;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m >> a >> b;
  fact[0] = 1;
  for (int i = 1; i < 1000006; ++i) {
    fact[i] = fact[i - 1] * i % mod;
  }
  oberfact[1000005] = ober(fact[1000005]);
  for (int i = 1000005 - 1; i >= 0; --i) {
    oberfact[i] = oberfact[i + 1] * (i + 1) % mod;
  }
  long long res = 0;
  for (int k = 0; k < n - 1; ++k) {
    if (m < k + 1) break;
    long long cur =
        C(m - 1, m - k - 1) * binpow(m, n - k - 2) % mod * A(n - 2, k) % mod;
    if (k != n - 2) cur = cur * first(n, k + 2) % mod;
    res = (res + cur) % mod;
  }
  cout << res << endl;
  cin >> n;
  return 0;
}
