/ll
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N =1e7+10;
const int mod=(1ll<<32);
int n,m,a[N],s1[N],b[N],f[N],rad[N],R,C;
char s[N],t[N],S[N];
void init(int len){
f[0]=-1;
int i=1,j=-1;
while(i<=len){
while(t[j+1]!=t[i+1]&&j!=-1)
j=f[j];
f[i++]=++j;
}
}
void KMP(int len){
int j=0;
for(int i=1;i<=strlen(s+1);i++){
while(j!=-1&&s[i]!=t[j+1]) j=f[j];
j++;
if(j==len) a[i-len+1]++;
}
}
void manacher(){
rad[1]=R=C=1;
for(int i=2;i<=n;i++){
if(i<=R) rad[i]=min(rad[2*C-i],R-i);
while(s[i-rad[i]]==s[i+rad[i]]&&i-rad[i]>=1&&i+rad[i]<=n)
++rad[i];
if(i+rad[i]-1>R) C=i,R=i+rad[i]-1;
}
}
void Slove(){
int ans=0;
for(int i=1;i<=n;i++) b[i]=(b[i-1]+a[i])%mod;
for(int i=1;i<=n;i++) s1[i]=(s1[i-1]+b[i])%mod;
for(int i=1;i<=n;i++){
int p=(m-1)/2;
if(rad[i]<p) continue;
ans+=((s1[i+rad[i]-m]%mod+mod-s1[i+p-m]%mod)+mod-(s1[i-p-1]%mod+mod-s1[i-rad[i]-1]%mod))%mod;
ans%=mod;
}
cout<<ans<<endl;
}
signed main(){
cin>>n>>m;
scanf("%s",s+1),scanf("%s",t+1);
init(strlen(t+1)),KMP(strlen(t+1)),manacher(),Slove();
}