#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
using P = pair<int,int>;

const int mod = 1000000007;
struct mint {
    ll x;
    mint(ll x=0):x(x%mod){}
    mint& operator+=(const mint a) {
        if ((x += a.x) >= mod) x -= mod;
        return *this;
    }
    mint& operator-=(const mint a) {
        if ((x += mod-a.x) >= mod) x -= mod;
        return *this;
    }
    mint& operator*=(const mint a) {
        (x *= a.x) %= mod;
        return *this;
    }
    mint operator+(const mint a) const {
        mint res(*this);
        return res+=a;
    }
    mint operator-(const mint a) const {
        mint res(*this);
        return res-=a;
    }
    mint operator*(const mint a) const {
        mint res(*this);
        return res*=a;
    }
};
mint dp[2020][2020];
mint sum[2020][2020];

int main(void){
    int n, m;
    cin >> n >> m;
    vector<ll> s(n);
    vector<ll> t(m);
    for(int i = 0; i < n; i++){
        cin >> s[i];
    }
    for(int i = 0; i < m; i++){
        cin >> t[i];
    }

    memset(dp, 0, sizeof(dp));
    memset(sum, 0, sizeof(sum));

    dp[0][0] = 1; // 空文字どうしなので
    sum[0][0] = 1;
    for(int i = 0; i <= n; i++){sum[0][i] = 1; sum[i][0] = 1;}

    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(s[i-1] == t[j-1]){
                dp[i][j] = sum[i-1][j-1];
            }

            sum[i][j] = sum[i][j-1] + sum[i-1][j] - sum[i-1][j-1] + dp[i][j];
        }
    }
    // for(int i = 0; i <= n; i++){
    //     for(int j = 0; j <= m; j++){
    //         cout << dp[i][j] << " ";
    //     }
    //     cout << endl;
    // }
    // cout << endl;
    // for(int i = 0; i <= n; i++){
    //     for(int j = 0; j <= m; j++){
    //         cout << sum[i][j] << " ";
    //     }
    //     cout << endl;
    // }
    cout << sum[n][m] << endl;
    return 0;
}
