#editorial参照
#そもそもの漸化式
#2次元累積和
#dp累積和のdpを含む漸化式 & dp消せる
n,m = map(int, input().split( ))

s = list(map(int, input().split( )))
t = list(map(int, input().split( )))

mod = 10**9 + 7

dp_sum = [[0]*(m+1) for _ in range(n+1)]

for i in range(n):
    for j in range(m):
        if s[i] == t[j]:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] + 1
            dp_sum[i][j] %= mod
        else:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] - dp_sum[i-1][j-1]
            dp_sum[i][j] %= mod
#print(dp_sum)
print(dp_sum[n-1][m-1]+1)#空集合で+1
 n,m = map(int, input().split( )) n map(int, input().split( )) map int input().split( ) ().split () input split m s = list(map(int, input().split( ))) s list(map(int, input().split( ))) list map(int, input().split( )) map int input().split( ) ().split () input split t = list(map(int, input().split( ))) t list(map(int, input().split( ))) list map(int, input().split( )) map int input().split( ) ().split () input split mod = 10**9 + 7 mod 10**9 + 7 10**9 10 9 7 [0]*(m+1) for _ in range(n+1) for _ in range(n+1) _ range(n+1) range n+1 n 1 for _ in range(n+1) [0]*(m+1) [0] 0 m+1 m 1 dp_sum = [[0]*(m+1) for _ in range(n+1)] dp_sum [[0]*(m+1) for _ in range(n+1)] for i in range(n):
    for j in range(m):
        if s[i] == t[j]:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] + 1
            dp_sum[i][j] %= mod
        else:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] - dp_sum[i-1][j-1]
            dp_sum[i][j] %= mod
#print(dp_sum) i range(n) range n for j in range(m):
        if s[i] == t[j]:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] + 1
            dp_sum[i][j] %= mod
        else:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] - dp_sum[i-1][j-1]
            dp_sum[i][j] %= mod
#print(dp_sum) j range(m) range m if s[i] == t[j]:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] + 1
            dp_sum[i][j] %= mod
        else:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] - dp_sum[i-1][j-1]
            dp_sum[i][j] %= mod
#print(dp_sum) s[i] == t[j] s[i] s i t[j] t j dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] + 1 dp_sum[i][j] [i] dp_sum i j dp_sum[i-1][j] + dp_sum[i][j-1] + 1 dp_sum[i-1][j] + dp_sum[i][j-1] dp_sum[i-1][j] [i-1] dp_sum i-1 i 1 j dp_sum[i][j-1] [i] dp_sum i j-1 j 1 1 dp_sum[i][j] %= mod dp_sum[i][j] [i] dp_sum i j mod dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] - dp_sum[i-1][j-1] dp_sum[i][j] [i] dp_sum i j dp_sum[i-1][j] + dp_sum[i][j-1] - dp_sum[i-1][j-1] dp_sum[i-1][j] + dp_sum[i][j-1] dp_sum[i-1][j] [i-1] dp_sum i-1 i 1 j dp_sum[i][j-1] [i] dp_sum i j-1 j 1 dp_sum[i-1][j-1] [i-1] dp_sum i-1 i 1 j-1 j 1 dp_sum[i][j] %= mod dp_sum[i][j] [i] dp_sum i j mod print(dp_sum[n-1][m-1]+1) print dp_sum[n-1][m-1]+1 dp_sum[n-1][m-1] [n-1] dp_sum n-1 n 1 m-1 m 1 1 s = list(map(int, input().split( ))) list(map(int, input().split( ))) s mod = 10**9 + 7 10**9 + 7 mod n,m = map(int, input().split( )) map(int, input().split( )) n m = map(int, input().split( )) map(int, input().split( )) m t = list(map(int, input().split( ))) list(map(int, input().split( ))) t dp_sum = [[0]*(m+1) for _ in range(n+1)] [[0]*(m+1) for _ in range(n+1)] dp_sum
#editorial参照
#そもそもの漸化式
#2次元累積和
#dp累積和のdpを含む漸化式 & dp消せる
n,m = map(int, input().split( ))

s = list(map(int, input().split( )))
t = list(map(int, input().split( )))

mod = 10**9 + 7

dp_sum = [[0]*(m+1) for _ in range(n+1)]

for i in range(n):
    for j in range(m):
        if s[i] == t[j]:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] + 1
            dp_sum[i][j] %= mod
        else:
            dp_sum[i][j] = dp_sum[i-1][j] + dp_sum[i][j-1] - dp_sum[i-1][j-1]
            dp_sum[i][j] %= mod
#print(dp_sum)
print(dp_sum[n-1][m-1]+1)#空集合で+1

