#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int N=2e5+9;

int pre[N],suf[N],at[N];

int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
#endif
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n,m;
    int ans=0;
    memset(pre,-1,sizeof pre);
    memset(suf,-1,sizeof suf);
    string s,t;
    cin>>n>>m;
    cin>>s>>t;
    int j=0;
    for(int i=0;i<n;i++){
        if(s[i]==t[j]&&j<=m-1){
        	pre[i]=j;
        	j++;
        }
    }
    j=m-1;
    for(int i=n-1;i>=0;i--){
        if(s[i]==t[j]&&j>=0){
        	suf[i]=j;
        	at[j]=i;
        	j--;
        }	
    }
    int prv=-1;
    for(int i=0;i<n;i++){
    	if(pre[i]){
    		if(prv==-1)prv=i;
    		else ans=max(ans,i-prv);
    		prv=i;
    	}
    }
    prv=-1;
    for(int i=n;i>=0;i--){
    	if(suf[i]){
    		if(prv==-1)prv=i;
    		else ans=max(ans,prv-i);
    		prv=i;
    	}
    }
    for(int i=0;i<n;i++){
    	if(pre[i]!=-1){	
    		ans=max(ans,at[pre[i]+1]-i);
    	}
    }
    cout<<ans<<'\n';
}