RT
#include<bits/stdc++.h>
using namespace std;
int cmp[1000010],pre[1000010],nex[1000010],ans[1000010];
int lena,lenb,cnt;
int a[1000010],b[1000010],l[1000010],r[1000010],kmp[1000010];
bool check(int temp[],int u,int v){
return temp[v+l[u]]<=temp[v]&&temp[v+r[u]]>=temp[v];
}
void setup_l_and_r()
{
for(int i=lena;i>=1;i--){
int temp=cmp[i];
if(pre[temp])
l[i]=a[pre[temp]]-i;
if(nex[temp]<=lena)
r[i]=a[nex[temp]]-i;
pre[nex[temp]]=pre[temp];
nex[pre[temp]]=nex[temp];
}
}
void setup_kmp(){
int j=2,k=0;
while(j<=lena){
while(k!=0&&!check(cmp,k+1,j))
k=kmp[k];
if(check(cmp,k+1,j))
k++;
kmp[j]=k;
j++;
}
}
void find()
{
int j=1,k=0;
while(j<=lenb)
{
while(k!=0&&!check(b,k+1,j))
k=kmp[k];
if(check(b,k+1,j))
k++;
if(k==lena)
ans[++cnt]=j-lena+1,k=cmp[k];
j++;
}
}
int main(){
cin>>lena>>lenb;
for(int i=1;i<=lena;i++){
cin>>a[i];
cmp[a[i]]=i;
pre[i]=i-1;
nex[i]=i+1;
}
for(int i=1;i<=lenb;i++)
cin>>b[i];
setup_l_and_r();
setup_kmp();
find();
cout<<cnt<<"\n";
for(int i=1;i<=cnt;i++)
cout<<ans[i]<<' ';
return 0;
}