import sys; input = sys.stdin.buffer.readline sys.setrecursionlimit(10**7) from collections import defaultdict con = 10 ** 9 + 7; INF = float("inf") def getlist(): return list(map(int, input().split())) #処理内容 def main(): N, P = getlist() Alist = [0, 0, 1] for i in range(N): Alist.append((Alist[-1] * P + Alist[-2]) % con) # print(Alist) ans = 0 edge = 0 for i in range(1, N + 1): edge += Alist[i] edge %= con ans = (edge ** 2) % con for i in range(1, N + 1): ans += Alist[i] ** 2 ans %= con ans = ans * pow(2, con - 2, con) print(ans % con) if __name__ == '__main__': main()