#include <bits/stdc++.h>
using namespace std;
const long long MOD = pow(10, 9) + 7;
long long mod(long long A, long long M) { return (A % M + M) % M; }
const long long INF = 1LL << 60;
const string ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string abc = "abcdefghijklmnopqrstuvwxyz";
template <class T>
bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
long long divCeil(long long A, long long B) { return (A + (B - 1)) / B; }
long long myctoi(char C) { return C - 48; }
char myitoc(long long N) { return '0' + N; }
signed main() {
  long long N, M;
  cin >> N >> M;
  vector<long long> S(N), T(M);
  for (long long i = 0; i < N; i++) cin >> S.at(i);
  for (long long i = 0; i < M; i++) cin >> T.at(i);
  vector<vector<long long>> dp(N + 10, vector<long long>(M + 10, 0));
  dp.at(0).at(0) = 1;
  for (long long i = 0; i <= N; i++) {
    for (long long j = 0; j <= M; j++) {
      dp.at(i + 1).at(j) += dp.at(i).at(j);
      dp.at(i + 1).at(j) %= MOD;
      dp.at(i).at(j + 1) += dp.at(i).at(j);
      dp.at(i).at(j + 1) %= MOD;
      dp.at(i + 1).at(j + 1) -= dp.at(i).at(j);
      dp.at(i + 1).at(j + 1) %= MOD;
      if (i < N && j < M && S.at(i) == T.at(j)) {
        dp.at(i + 1).at(j + 1) += dp.at(i).at(j);
        dp.at(i + 1).at(j + 1) %= MOD;
      }
    }
  }
  long long ans = dp.at(N).at(M);
  cout << ans << endl;
}
