import numpy as np m = 1000000007 n, p = map(int, input().split()) def mpow(b, i): if i == 0: return 1 p = mpow(b, i>>1)**2 % m return p * b % m if i & 1 else p r = mpow(p, m-2) h = (m+1)//2 c = np.matrix([[p, 1], [1, 0]], 'i8') u, v = (np.matrix([1, 0]) * mpow(c, n-1)).flat s = (u + v - 1) * r % m t = (u * v % m) * r % m print((s**2 + t) % m * h % m)