#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
const long long MOD = 1e9 + 7;
long long DP[2100][2100];
long long SUM[2100][2100];
int main() {
  long long N, M;
  cin >> N >> M;
  vector<long long> S(N + 1);
  vector<long long> T(M + 1);
  for (int i = 0; i < N; i++) {
    cin >> S[i];
  }
  for (int i = 0; i < M; i++) {
    cin >> T[i];
  }
  S[N] = -10000;
  T[M] = -100;
  DP[0][0] = 1;
  for (int i = 0; i < N + 1; i++) {
    long long s = S[i];
    for (int j = 0; j < M + 1; j++) {
      long long t = T[j];
      SUM[i][j] = DP[i][j];
      if (i > 0) SUM[i][j] += SUM[i - 1][j];
      if (j > 0) SUM[i][j] += SUM[i][j - 1];
      if (j > 0 && i > 0) SUM[i][j] -= SUM[i - 1][j - 1];
      SUM[i][j] %= MOD;
      if (s == t) {
        DP[i + 1][j + 1] += SUM[i][j];
        DP[i + 1][j + 1] %= MOD;
      }
    }
  }
  long long ans = 0;
  ans = SUM[N][M];
  cout << ans << endl;
  return 0;
}
