#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define pb push_back
#define mp make_pair
#define PI 3.14159265
ll mod1=1000000007;
// bool comp(pair<ll,ll>a,pair<ll,ll>b)
// {
//    // if(a.first==b.first)
//    //  return a.second<b.second;
//    // else
//     return a.first*a.second<b.first*b.second;

// }
// sort(a.begin(),a.end(),greater<int>());
// priority_queue<int, vector<int>, greater<int> > Q;
// vector<ll> factorial(1001,1);
// vector<ll> inv_factorial(1001);
// vector<vector<ll> > combi(1001,vector<ll>(1001));
// ll binpow(ll a, ll b)
// {
//     ll res = 1;
//     while (b > 0) {
//         if (b & 1)
//             res = res * a;
//         a = a * a;
//         b >>= 1;
//     }
//     return res;
// }
 
ll binpow(ll a, ll b, ll mod)
{
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = (res * a)%mod;
        a = (a * a)%mod;
        b >>= 1;
    }
    return res%mod;
}
 
// ll gcd(ll a, ll b)
// {
//     if(b==0) return a;
//     else return gcd(b,a%b);
// }
 
// ll lcm (ll a, ll b)
// {
//     return ((a / gcd(a, b)) * b);
// }
 
// bool comp(ll a, ll b)
// {
//     return a>b;
// }
 
// ll inversemod(ll a, ll mod)
// {
//     return binpow(a,mod-2, mod);
// }
// for(int i=1;i<=1000;i++) factorial[i]=(factorial[i-1]*i)%mod1;
 
//   for(int i=0;i<=1000;i++) inv_factorial[i]=inversemod(factorial[i],mod1);
 
//   for(int i=0;i<=1000;i++)
//   {
//     for(int j=0;j<=i;j++)
//     {
//       combi[i][j]=(((factorial[i]*inv_factorial[i-j])%mod1)*inv_factorial[j])%mod1;
//     }
//   }
// int func(string A)
// {
//   int i;
//   int n=A.size();
//   int max=-1;
//   int c=1;
//   for(i=1;i<n;i++)
//   {
//     if(A[i]==A[i-1])
//       c++;
//     else
//     {
//       c=1;
//     }
//     if(c>max)
//       max=c;
//   }
//   return max;
// }

// ll func(ll n)
// {
//   ll d=0;
//   while(n!=0)
//   {
//     d=n%10;
//     n=n/10;
//   }
//   return d;
// }
int main()
{
   ios_base::sync_with_stdio(false);
   cin.tie(0);
   ll t;
   // cin>>t;
   t=1;
   for(ll f=0;f<t;f++)
   {
      int n,m,i;
      string A,B;
      cin>>n>>m>>A>>B;
      int n1=A.size();
      int n2=B.size();
      if(n==m)
      {
        cout<<1<<endl;
        continue;
      }
      int dp[m+1];
      int j=m-1;
      for(i=n-1;i>=0 && j>=0;i--)
      {
        if(A[i]==B[j])
        {
          dp[m-j]=i+1;
          j--;
        }
      }
    //   for(i=1;i<=m;i++)
    //   cout<<dp[i]<<' ';
    //   cout<<endl;
      int dp2[m+1];
      j=0;
      for(i=0;i<n && j<m;i++)
      {
        if(A[i]==B[j])
        {
          dp2[j+1]=i+1;
          j++;
        }
      }
    //   for(i=1;i<=m;i++)
    //   cout<<dp2[i]<<' ';
    //   cout<<endl;
      int ans=-1;
      for(i=1;i<m;i++)
      {
        ans=max(ans,dp[m-i]-dp2[i]);
      }
      cout<<ans<<endl;
   }
}