package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 1000000007
func modPow(a, e int64) int64 {
a %= MOD
res := int64(1)
for e > 0 {
if e&1 == 1 {
res = res * a % MOD
}
a = a * a % MOD
e >>= 1
}
return res
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
var n, m int64
fmt.Fscan(in, &n, &m)
if m == 1 {
fmt.Print((n + 1) % MOD)
return
}
num := m%MOD*modPow(2*m-1, n)%MOD - modPow(m, n)
num %= MOD
if num < 0 {
num += MOD
}
ans := num * modPow(m-1, MOD-2) % MOD
fmt.Print(ans)
}