#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7ll;
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 inf = 1ll << 60;
int n, m;
vector<int> s, t;
int main() {
  cin >> n >> m;
  int v;
  for (int i = 0; i < n; i++) {
    scanf("%d", &v);
    s.emplace_back(v);
  }
  for (int i = 0; i < m; i++) {
    scanf("%d", &v);
    t.emplace_back(v);
  }
  vector<vector<long long>> dp(2020, vector<long long>(2020));
  for (int i = 0; i < m + 1; i++) {
    dp.at(0).at(i) = 1;
  }
  for (int i = 0; i < n + 1; i++) {
    dp.at(i).at(0) = 1;
  }
  for (int i = 1; i < n + 1; i++) {
    for (int j = 1; j < m + 1; j++) {
      if (s.at(i - 1) == t.at(j - 1))
        dp.at(i).at(j) = (dp.at(i).at(j - 1) + dp.at(i - 1).at(j)) % mod;
      else
        dp.at(i).at(j) =
            (dp.at(i).at(j - 1) + dp.at(i - 1).at(j) - dp.at(i - 1).at(j - 1)) %
            mod;
    }
  }
  printf("%lld", dp.at(n).at(m));
}
