第10个点T掉了......
#include<bits/stdc++.h>
#define int long long
#define N 5000005
using namespace std;
int n,m,a[N],b[N],num[N],cnt[N],kmp[N],tot,k,l1,l2,p,ans,fl,c1,c2,d1,d2;
char s1[N],s2[N];
int gcd(int x,int y){
return y?gcd(y,x%y):x;
}
signed main(){
ios::sync_with_stdio(false);
cin>>n>>m
for(int i=1;i<=n;i++) cin>>a[i],s1[l1++]=(a[i]+'0');
for(int i=1;i<=m;i++){
cin>>b[i];
if(i!=1&&b[i]!=b[i-1]) fl++;
}
if(!fl) goto A;
if(fl==1) goto B;
for(int i=1,j;i<=m;i++){
j=i;
while(b[j+1]==b[j]&&j<m) j++;
num[++tot]=b[j],cnt[tot]=j-i+1;
i=j;
}
k=cnt[1];
for(int i=2;i<=tot;i++) k=gcd(k,cnt[i]);
for(int i=1;i<=tot;i++) cnt[i]/=k;
m/=k;
for(int i=1;i*m<=n;i++){
l2=0;
for(int j=1;j<=tot;j++){
for(int q=1;q<=cnt[j]*i;q++){
s2[l2++]=(num[j]+'0');
}
}
p=0;
kmp[0]=kmp[1]=0;
for(int j=1;j<l2;j++){
while(p&&s2[j]!=s2[p]) p=kmp[p];
if(s2[p]==s2[j]) kmp[j+1]=++p;
else kmp[j+1]=0;
}
p=0;
for(int j=0;j<l1;j++){
while(p&&s2[p]!=s1[j]) p=kmp[p];
if(s2[p]==s1[j]) p++;
if(p==l2){
ans++;
p=kmp[p];
}
}
}
cout<<ans;
return 0;
A:
for(int i=1;i<=n;i++){
if(a[i]!=b[1]){
if(k<=m) ans+=(1+k)*k/2;
else ans+=(1+k*2-m)*m/2;
k=0;
}else k++;
}
ans+=(1+k)*k/2;
cout<<ans;
return 0;
B:
for(int i=1;i<=m;i++){
if(i!=1&&b[i]!=b[i-1]){
d1=i-1;
break;
}
}
d2=m-d1;
k=gcd(d1,d2);
d1/=k,d2/=k;
for(int i=1;i<=n;i++){
if(a[i]!=b[m]&&a[i]!=b[1]||a[i]==b[1]&&c2||a[i]==b[m]&&(!c1)){
c1/=d1,c2/=d2;
ans+=min(c1,c2);
c1=c2=0;
if(a[i]==b[1]) c1=1;
}
else if(a[i]==b[1]) c1++;
else if(a[i]==b[m]) c2++;
}
c1/=d1,c2/=d2;
ans+=min(c1,c2);
cout<<ans;
return 0;
}