#include "bits/stdc++.h"
using namespace std;
#define int long long int
int32_t main()
{
    int n,m;
    cin>>n>>m;
    vector<int> a(n+1),b(m+1);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=m;i++)
    {
        cin>>b[i];
    }

    vector<vector<int> > dp(n+1,vector<int>(m+1));


    for(int i=1;i<=m;i++)
    {
        dp[0][i]=i;
    }

    for(int i=1;i<=n;i++)
    {
        dp[i][0]=i;
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            dp[i][j]=min({dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+((a[i]!=b[j])?1:0)});
        }
    }

    cout<<dp[n][m]<<endl;

    return 0;
}
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define pb push_back
#define all(_obj) _obj.begin(),_obj.end()
#define F first
#define S second
#define pll pair<ll, ll> 
#define vll vector<ll>
ll n,m,a,b,c,k,temp,x,y,INF=1e18;
const int MAXN=1e5+11,mod=1e9+7;
ll max(ll a,ll b) {return ((a>b)?a:b);}
ll min(ll a,ll b) {return ((a>b)?b:a);}
vll read(int n) {vll v(n);for (int i = 0; i < v.size(); i++)cin>>v[i];return v;}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int dp[1001][1001];
void sol(void)
{
cin>>n>>m;
vll v1=read(n),v2=read(m);
for(int i=0;i<=1000;i++)
for(int j=0;j<=1000;j++)
dp[i][j]=1e9;
for(int i=0;i<=1000;i++)
dp[i][m]=n+m,dp[n][i]=n+m;
for(int i=n-1;i>=0;i--)
{
    for(int j=m-1;j>=0;j--)
    {
        if(v1[i]==v2[j])
        dp[i][j]=min(dp[i][j],dp[i+1][j+1]-2);
        dp[i][j]=min(dp[i][j],dp[i+1][j+1]-1);
        dp[i][j]=min(dp[i][j],dp[i+1][j]);
        dp[i][j]=min(dp[i][j],dp[i][j+1]);
    }
}
cout<<dp[0][0];
return ;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL),cout.tie(NULL);
    int test=1;
    //cin>>test;
    while(test--) sol();
}
