#include <bits/stdc++.h>
using namespace std;
const long long N = 2e3 + 5;
const long long MOD = 1e9 + 7;
long long n, m;
long long a[N], b[N];
long long dp[N][N];
long long recur(long long i, long long j) {
  if (i > n) return 0;
  if (j > m) return 0;
  long long &ans = dp[i][j];
  if (ans != -1) return ans;
  if (a[i] == b[j])
    ans = 1 + recur(i + 1, j) + recur(i, j + 1);
  else
    ans = recur(i + 1, j) + recur(i, j + 1) - recur(i + 1, j + 1);
  ans %= MOD;
  return ans;
}
int32_t main() {
  memset(dp, -1, sizeof(dp));
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) cin >> a[i];
  for (long long i = 1; i <= m; i++) cin >> b[i];
  long long ans = recur(1, 1);
  ans++;
  ans %= MOD;
  cout << ans;
  return 0;
}
