#include <bits/stdc++.h>
#define int long long
int last[26];
int lastRev[26];
int dp[310];
int olddp[310];
signed main(){
int n,m;
std::cin >> n >> m;
std::string s1,s2;
std::cin >> s1 >> s2;
bool f=true;
for(auto character:s2){
int target = character-'a';
for(int i=0;i<26;i++)last[i]=1e18,lastRev[i]=1e18;
for(int i=s1.size()-1;i>=0;i--){
dp[i]=1e18;
int current = s1[i]-'a';
lastRev[current]=std::min(lastRev[current],olddp[i]);
olddp[i]=std::min(olddp[i],lastRev[current]);
for(int l=0;l<26;l++)lastRev[l]+=1;
}
for(int i=0;i<s1.size();i++){
int current = s1[i]-'a';
last[current]=std::min(last[current],olddp[i]);
olddp[i]=std::min(olddp[i],lastRev[current]);
for(int l=0;l<26;l++)last[l]+=1;
}
for(int i=0;i<s1.size();i++){
int current = s1[i]-'a';
if(current==target){
if(i!=s1.size()-1)
dp[i]=std::min(dp[i],1+olddp[i+1]);
if(i!=0)
dp[i]=std::min(dp[i],1+olddp[i-1]);
if(f)dp[i]=0;
}
}
for(int i=0;i<s1.size();i++)olddp[i]=dp[i];
// for(int i=0;i<s1.size();i++){
// std::cout << ((olddp[i]!=1e18)?olddp[i]:-1 )<<' '<< ((dp[i]!=1e18)?dp[i]:-1) << '|';
// }std::cout << '\n';
f=false;
}
int min=1e18;
for(int i=0;i<s1.size();i++){
min=std::min(min,dp[i]);
}
if(min>=1e18)min=-1;
std::cout << min;
}