import sys



read = sys.stdin.read

readline = sys.stdin.readline

readlines = sys.stdin.readlines

sys.setrecursionlimit(10 ** 9)

INF = 1 << 60

MOD = 1000000007





def main():

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

    S = list(map(int, readline().split()))

    T = list(map(int, readline().split()))



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

    dp[0][0] = 1

    for i in range(N + 1):

        dp[i][0] = 1

    for j in range(M + 1):

        dp[0][j] = 1



    for i in range(N):

        for j in range(M):

            dp[i + 1][j + 1] = (dp[i][j + 1] + dp[i + 1][j] - dp[i][j]) % MOD

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

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



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

    return





if __name__ == '__main__':

    main()

import sys



read = sys.stdin.read

readline = sys.stdin.readline

readlines = sys.stdin.readlines

sys.setrecursionlimit(10 ** 9)

INF = 1 << 60

MOD = 1000000007





def main():

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

    S = list(map(int, readline().split()))

    T = list(map(int, readline().split()))



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

    for i in range(N + 1):

        dp[i][0] = 1

    for j in range(M + 1):

        dp[0][j] = 1



    for i in range(N):

        for j in range(M):

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

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

            else:

                dp[i + 1][j + 1] = (dp[i][j + 1] + dp[i + 1][j] - dp[i][j]) % MOD



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

    return





if __name__ == '__main__':

    main()

import sys

read = sys.stdin.read
readline = sys.stdin.readline
readlines = sys.stdin.readlines
sys.setrecursionlimit(10**9)
INF = 1 << 60
MOD = 1000000007


def main():
    N, M = list(map(int, readline().split()))
    S = list(map(int, readline().split()))
    T = list(map(int, readline().split()))
    dp = [[0] * (M + 1) for _ in range(N + 1)]
    dp[0][0] = 1
    for i in range(N + 1):
        dp[i][0] = 1
    for j in range(M + 1):
        dp[0][j] = 1
    for i in range(N):
        for j in range(M):
            dp[i + 1][j + 1] = (dp[i][j + 1] + dp[i + 1][j] - dp[i][j]) % MOD
            if S[i] == T[j]:
                dp[i + 1][j + 1] = (dp[i + 1][j + 1] + dp[i][j]) % MOD
    print((dp[N][M]))
    return


if __name__ == "__main__":
    main()

import sys

read = sys.stdin.read
readline = sys.stdin.readline
readlines = sys.stdin.readlines
sys.setrecursionlimit(10**9)
INF = 1 << 60
MOD = 1000000007


def main():
    N, M = list(map(int, readline().split()))
    S = list(map(int, readline().split()))
    T = list(map(int, readline().split()))
    dp = [[0] * (M + 1) for _ in range(N + 1)]
    for i in range(N + 1):
        dp[i][0] = 1
    for j in range(M + 1):
        dp[0][j] = 1
    for i in range(N):
        for j in range(M):
            if S[i] == T[j]:
                dp[i + 1][j + 1] = (dp[i][j + 1] + dp[i + 1][j]) % MOD
            else:
                dp[i + 1][j + 1] = (dp[i][j + 1] + dp[i + 1][j] - dp[i][j]) % MOD
    print((dp[N][M]))
    return


if __name__ == "__main__":
    main()

-    dp[0][0] = 1 -            dp[i + 1][j + 1] = (dp[i][j + 1] + dp[i + 1][j] - dp[i][j]) % MOD -                dp[i + 1][j + 1] = (dp[i + 1][j + 1] + dp[i][j]) % MOD +                dp[i + 1][j + 1] = (dp[i][j + 1] + dp[i + 1][j]) % MOD +            else: +                dp[i + 1][j + 1] = (dp[i][j + 1] + dp[i + 1][j] - dp[i][j]) % MOD