#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2000;
const int MOD = 1000000000 + 7;
int dp[MAXN][MAXN];
int sum[MAXN][MAXN];
int get(int x, int y) { return sum[x][y]; }
int upd(int &x) { x = ((long long)x + (long long)MOD * MOD) % MOD; }
int update(int x, int y, int d) {
  sum[x][y] = d;
  if (x > 0) sum[x][y] += sum[x - 1][y];
  upd(sum[x][y]);
  if (y > 0) sum[x][y] += sum[x][y - 1];
  upd(sum[x][y]);
  if (x > 0 && y > 0) sum[x][y] -= sum[x - 1][y - 1];
  upd(sum[x][y]);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  vector<int> s(n);
  vector<int> t(m);
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < m; i++) cin >> t[i];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (s[i] == t[j]) {
        dp[i][j] = 1;
        dp[i][j] += get(i - 1, j - 1);
        upd(dp[i][j]);
        update(i, j, dp[i][j]);
      }
    }
  }
  int ans = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      ans += dp[i][j];
      ans %= MOD;
    }
  }
  cout << ans;
  return 0;
}
