#include <iostream>
#include <vector>
#include <iostream>
#include <algorithm>
#include <math.h>

using namespace std;

const int MOD = 1000000007;

int main() {
	int N, P;
	cin >> N >> P;

	int dgt = (int)log2(N);

	long long ans = 1;

	vector<long long> modulo(40);

	modulo.at(0) = 1;
	modulo.at(1) = P - 2;

	for (int i = 2; i < 40; i++) {
		modulo.at(i) = (modulo.at(i - 1) * modulo.at(i - 1)) % MOD;
	}

	/*for (int i = 0; i < 40; i++) {
		cout << i << " " << modulo.at(i) << endl;
	}*/
	
	for (int i = 0; i < dgt+1; i++) {
		if (((N-1) >> i) & 1 == 1) {
			ans *= modulo.at(i+1);
			ans %= MOD;
		}
	}

	ans *= P - 1;
	ans %= MOD;

	cout << ans << endl;
}
#include<iostream>
#define mod 1000000007
long long pow(long long x, long long n);

using namespace std;

int main(){
    long long N,P,res;
    cin >> N>>P;
    res=pow(P-2,N-1);
    res*=P-1;
    res%=mod;
    cout << res << endl;
}

long long pow(long long x, long long n) {
    long long ret = 1;
    while (n > 0) {
        if (n & 1) ret = ret * x %mod;
        x = x * x %mod;
        n >>= 1;
    }
    return ret;
}