N, M = list(map(int, input().split()))

S = tuple(map(int, input().split()))

T = tuple(map(int, input().split()))

MOD = 10 ** 9 + 7



dp = [[1] * (M + 1) for _ in range(N + 1)]

for i in range(N):

    for j in range(M):

        dp[i + 1][j + 1] = dp[i][j + 1] + dp[i + 1][j]

        if S[i] != T[j]:

            dp[i + 1][j + 1] -= dp[i][j]

        dp[i + 1][j + 1] %= MOD

print((dp[N][M]))

import numpy as np



N, M = list(map(int, input().split()))

S = np.array(list(map(int, input().split())))

T = np.array(list(map(int, input().split())))

MOD = 10 ** 9 + 7



neq = (S[:, None] != T[None, :])

dp = np.ones(M + 1, dtype=np.int64)

for i in range(N):

    new_dp = dp.copy()

    new_dp[1:] -= dp[:-1] * neq[i]

    np.cumsum(new_dp, out=new_dp)

    dp = new_dp % MOD

print((dp[M]))

N, M = list(map(int, input().split()))
S = tuple(map(int, input().split()))
T = tuple(map(int, input().split()))
MOD = 10**9 + 7
dp = [[1] * (M + 1) for _ in range(N + 1)]
for i in range(N):
    for j in range(M):
        dp[i + 1][j + 1] = dp[i][j + 1] + dp[i + 1][j]
        if S[i] != T[j]:
            dp[i + 1][j + 1] -= dp[i][j]
        dp[i + 1][j + 1] %= MOD
print((dp[N][M]))

import numpy as np

N, M = list(map(int, input().split()))
S = np.array(list(map(int, input().split())))
T = np.array(list(map(int, input().split())))
MOD = 10**9 + 7
neq = S[:, None] != T[None, :]
dp = np.ones(M + 1, dtype=np.int64)
for i in range(N):
    new_dp = dp.copy()
    new_dp[1:] -= dp[:-1] * neq[i]
    np.cumsum(new_dp, out=new_dp)
    dp = new_dp % MOD
print((dp[M]))

+import numpy as np + -S = tuple(map(int, input().split())) -T = tuple(map(int, input().split())) +S = np.array(list(map(int, input().split()))) +T = np.array(list(map(int, input().split()))) -dp = [[1] * (M + 1) for _ in range(N + 1)] +neq = S[:, None] != T[None, :] +dp = np.ones(M + 1, dtype=np.int64) -    for j in range(M): -        dp[i + 1][j + 1] = dp[i][j + 1] + dp[i + 1][j] -        if S[i] != T[j]: -            dp[i + 1][j + 1] -= dp[i][j] -        dp[i + 1][j + 1] %= MOD -print((dp[N][M])) +    new_dp = dp.copy() +    new_dp[1:] -= dp[:-1] * neq[i] +    np.cumsum(new_dp, out=new_dp) +    dp = new_dp % MOD +print((dp[M]))