###template###
import sys
def input(): return sys.stdin.readline().rstrip()
def mi(): return map(int, input().split())
###template###

N, M = mi()
Ss = list(mi())
Ts = list(mi())
slen = len(Ss)
tlen = len(Ts)

#DPを2つ作る
#1スタートにしておく。0は、for分でindexエラーを出さないために使う
DP_pairs = [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] #末尾がS[i]==T[j]である共通部分列の数
DP_cumsum = [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] #二次元累積和


for i, s in enumerate(Ss):
  i += 1 #1スタート
  for j, t in enumerate(Ts):
    j += 1 #1スタート
    if s==t:
      DP_pairs[i][j] = DP_cumsum[i-1][j-1] + 1
    #s!=tの場合はほっといてもDP_pairsが0なので何もする必要なし
    DP_cumsum[i][j] = (DP_cumsum[i][j-1]+DP_cumsum[i-1][j]-DP_cumsum[i-1][j-1]+DP_pairs[i][j])%(10**9+7)

print(DP_cumsum[len(Ss)][len(Ts)]+1) import sys sys def input(): return sys.stdin.readline().rstrip() input def mi(): return map(int, input().split())
###template### mi N, M = mi() N mi() mi M Ss = list(mi()) Ss list(mi()) list mi() mi Ts = list(mi()) Ts list(mi()) list mi() mi slen = len(Ss) slen len(Ss) len Ss tlen = len(Ts) tlen len(Ts) len Ts [0] * (len(Ts)+1) for _ in range(len(Ss)+1) for _ in range(len(Ss)+1) _ range(len(Ss)+1) range len(Ss)+1 len(Ss) len Ss 1 for _ in range(len(Ss)+1) [0] * (len(Ts)+1) [0] 0 len(Ts)+1 len(Ts) len Ts 1 DP_pairs = [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] DP_pairs [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] [0] * (len(Ts)+1) for _ in range(len(Ss)+1) for _ in range(len(Ss)+1) _ range(len(Ss)+1) range len(Ss)+1 len(Ss) len Ss 1 for _ in range(len(Ss)+1) [0] * (len(Ts)+1) [0] 0 len(Ts)+1 len(Ts) len Ts 1 DP_cumsum = [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] DP_cumsum [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] for i, s in enumerate(Ss):
  i += 1 #1スタート
  for j, t in enumerate(Ts):
    j += 1 #1スタート
    if s==t:
      DP_pairs[i][j] = DP_cumsum[i-1][j-1] + 1
    #s!=tの場合はほっといてもDP_pairsが0なので何もする必要なし
    DP_cumsum[i][j] = (DP_cumsum[i][j-1]+DP_cumsum[i-1][j]-DP_cumsum[i-1][j-1]+DP_pairs[i][j])%(10**9+7) i s enumerate(Ss) enumerate Ss i += 1 i 1 for j, t in enumerate(Ts):
    j += 1 #1スタート
    if s==t:
      DP_pairs[i][j] = DP_cumsum[i-1][j-1] + 1
    #s!=tの場合はほっといてもDP_pairsが0なので何もする必要なし
    DP_cumsum[i][j] = (DP_cumsum[i][j-1]+DP_cumsum[i-1][j]-DP_cumsum[i-1][j-1]+DP_pairs[i][j])%(10**9+7) j t enumerate(Ts) enumerate Ts j += 1 j 1 if s==t:
      DP_pairs[i][j] = DP_cumsum[i-1][j-1] + 1
    #s!=tの場合はほっといてもDP_pairsが0なので何もする必要なし
     s==t s t DP_pairs[i][j] = DP_cumsum[i-1][j-1] + 1 DP_pairs[i][j] [i] DP_pairs i j DP_cumsum[i-1][j-1] + 1 DP_cumsum[i-1][j-1] [i-1] DP_cumsum i-1 i 1 j-1 j 1 1 DP_cumsum[i][j] = (DP_cumsum[i][j-1]+DP_cumsum[i-1][j]-DP_cumsum[i-1][j-1]+DP_pairs[i][j])%(10**9+7) DP_cumsum[i][j] [i] DP_cumsum i j (DP_cumsum[i][j-1]+DP_cumsum[i-1][j]-DP_cumsum[i-1][j-1]+DP_pairs[i][j])%(10**9+7) DP_cumsum[i][j-1]+DP_cumsum[i-1][j]-DP_cumsum[i-1][j-1]+DP_pairs[i][j] DP_cumsum[i][j-1]+DP_cumsum[i-1][j]-DP_cumsum[i-1][j-1] DP_cumsum[i][j-1]+DP_cumsum[i-1][j] DP_cumsum[i][j-1] [i] DP_cumsum i j-1 j 1 DP_cumsum[i-1][j] [i-1] DP_cumsum i-1 i 1 j DP_cumsum[i-1][j-1] [i-1] DP_cumsum i-1 i 1 j-1 j 1 DP_pairs[i][j] [i] DP_pairs i j 10**9+7 10**9 10 9 7 print(DP_cumsum[len(Ss)][len(Ts)]+1) print DP_cumsum[len(Ss)][len(Ts)]+1 DP_cumsum[len(Ss)][len(Ts)] [len(Ss)] DP_cumsum len(Ss) len Ss len(Ts) len Ts 1 def input(): return sys.stdin.readline().rstrip() def input(): return sys.stdin.readline().rstrip() input N, M = mi() mi() N M = mi() mi() M Ss = list(mi()) list(mi()) Ss tlen = len(Ts) len(Ts) tlen j += 1 1 j DP_pairs = [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] DP_pairs def mi(): return map(int, input().split())
###template### def mi(): return map(int, input().split())
###template### mi Ts = list(mi()) list(mi()) Ts slen = len(Ss) len(Ss) slen DP_cumsum = [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] DP_cumsum i += 1 1 i
###template###
import sys
def input(): return sys.stdin.readline().rstrip()
def mi(): return map(int, input().split())
###template###

N, M = mi()
Ss = list(mi())
Ts = list(mi())
slen = len(Ss)
tlen = len(Ts)

#DPを2つ作る
#1スタートにしておく。0は、for分でindexエラーを出さないために使う
DP_pairs = [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] #末尾がS[i]==T[j]である共通部分列の数
DP_cumsum = [[0] * (len(Ts)+1) for _ in range(len(Ss)+1)] #二次元累積和


for i, s in enumerate(Ss):
  i += 1 #1スタート
  for j, t in enumerate(Ts):
    j += 1 #1スタート
    if s==t:
      DP_pairs[i][j] = DP_cumsum[i-1][j-1] + 1
    #s!=tの場合はほっといてもDP_pairsが0なので何もする必要なし
    DP_cumsum[i][j] = (DP_cumsum[i][j-1]+DP_cumsum[i-1][j]-DP_cumsum[i-1][j-1]+DP_pairs[i][j])%(10**9+7)

print(DP_cumsum[len(Ss)][len(Ts)]+1)
