#include <bits/stdc++.h>
using namespace std;
long long const NMAX = 4001;
long long mod = 1e9 + 7;
long long fact[NMAX];
long long finv[NMAX];
long long comb(long long n, long long a) {
  return fact[n] * finv[a] % mod * finv[n - a] % mod;
}
long long numk[NMAX];
void ppdp(long long N, long long M, long long dp[NMAX][NMAX]) {
  for (long long i = 0; i < N; i++) {
    for (long long j = 0; j < M; j++) {
      printf("%lld ", dp[i][j]);
    }
    printf("\n");
  }
}
int main() {
  long long N;
  long long M;
  long long S[NMAX];
  long long T[NMAX];
  long long DP[NMAX][NMAX];
  long long SUM[NMAX];
  long long SUMmin1[NMAX];
  cin >> N;
  cin >> M;
  for (long long i = 0; i < N; i++) {
    cin >> S[i];
  }
  for (long long i = 0; i < M; i++) {
    cin >> T[i];
  }
  for (long long s = 0; s < N; s++) {
    SUMmin1[0] = SUM[0];
    if (S[s] == T[0]) {
      DP[s][0] = 1;
      SUM[0] += 1;
    }
    for (long long t = 1; t < M; t++) {
      DP[s][t] = DP[s][t - 1];
      if (S[s] == T[t]) {
        DP[s][t] += SUMmin1[t - 1] + 1;
      }
      SUMmin1[t] = SUM[t];
      SUM[t] += DP[s][t];
    }
  }
  long long hoge = (SUM[M - 1] + 1) % mod;
  printf("%lld\n", hoge);
}
