#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
    
      int n,m;
      cin>>n>>m;
      string s,t;
      cin>>s>>t;
      map<char,vector<int>> mp;
      for(int i=0;i<n;i++){
          mp[s[i]].push_back(i);
      }
       
     unordered_map<int,int> p;
     int l=n-1;
     for(int i=m-1;i>=0;i--){
         while(s[l]!=t[i]){
             l--;
         }
         p[i]=l;
         l--;
     }
     
     int mx=0;
     int last=0;
     int st= mp[t[0]][0];
     for(int i=0;i<m-1;i++){
          auto it= upper_bound(mp[t[i+1]].begin(),mp[t[i+1]].end(),p[i+1]);
          it--;
          int k=*it;
          mx= max(mx,k-st);
          auto it2= upper_bound(mp[t[i+1]].begin(),mp[t[i+1]].end(),st);
         

          st=*it2;
     }
     cout<<mx<<endl;
    
    return 0;
}
