#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<map>
#include<ctime>
#include<set>
#include<queue>
#include<cmath>
#include<vector>
#include<bitset>
#include<functional>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
#define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
using namespace std;
typedef long long LL;
typedef double ld;
const int MAX=1000000+10;
int n,m,l[MAX],c[MAX],a[MAX];
int begin[MAX],next[MAX],add[MAX];
void readint(int& now)
{
static char a=getchar();
while(a>'9' || a<'0')
a=getchar();
now=0;
for(;a<='9' && a>='0';a=getchar())
now=now*10+a-'0';
}
int main()
{
#ifndef ONLINE_JUDGE
// freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#endif
int i;
readint(n);
readint(m);
int totLen=0;
REP(i,1,m)
{
readint(l[i]);
totLen+=l[i];
}
REP(i,1,m)
readint(c[i]);
REP(i,1,n)
{
readint(a[i]);
next[i]=begin[a[i]];
begin[a[i]]=i;
}
for(i=1;i<=m;++i)
{
int u=begin[c[i]],v,num=1;
int last=n+1;
for(v=u,num=1;num<l[i] && v;++num,v=next[v])
;
if(num<l[i])
break;
for(;v;v=next[v])
{
//v>=x>next[v]
//last>x+totLen-1>=u
int l=max(next[v]+1,u+1-totLen);
int r=min(v,last+1-totLen-1);
if(l<=r)
{
add[l]++;
add[r+1]--;
}
last=u;
u=next[u];
}
}
int now=0,ans=0;
REP(i,1,n)
{
now+=add[i];
if(now==m)
++ans;
}
printf("%d\n",ans);
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxmc3RyZWFtPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPGN0aW1lPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxjbWF0aD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxiaXRzZXQ+CiNpbmNsdWRlPGZ1bmN0aW9uYWw+CiNkZWZpbmUgeCBmaXJzdAojZGVmaW5lIHkgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgUkVQKGksbCxyKSBmb3IoKGkpPShsKTsoaSk8PShyKTsrKyhpKSkKI2RlZmluZSBSRVAyKGksbCxyKSBmb3IoKGkpPShsKTsoaSkhPShyKTsrKyhpKSkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIExMOwp0eXBlZGVmIGRvdWJsZSBsZDsKCmNvbnN0IGludCBNQVg9MTAwMDAwMCsxMDsKCmludCBuLG0sbFtNQVhdLGNbTUFYXSxhW01BWF07CmludCBiZWdpbltNQVhdLG5leHRbTUFYXSxhZGRbTUFYXTsKCgp2b2lkIHJlYWRpbnQoaW50JiBub3cpCnsKICAgIHN0YXRpYyBjaGFyIGE9Z2V0Y2hhcigpOwogICAgd2hpbGUoYT4nOScgfHwgYTwnMCcpCiAgICAgICAgYT1nZXRjaGFyKCk7CiAgICBub3c9MDsKICAgIGZvcig7YTw9JzknICYmIGE+PScwJzthPWdldGNoYXIoKSkKICAgICAgICBub3c9bm93KjEwK2EtJzAnOwp9CgppbnQgbWFpbigpCnsKI2lmbmRlZiBPTkxJTkVfSlVER0UKLy8gICAgZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pO2ZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwojZW5kaWYKICAgIGludCBpOwogICAgcmVhZGludChuKTsKICAgIHJlYWRpbnQobSk7CiAgICBpbnQgdG90TGVuPTA7CiAgICBSRVAoaSwxLG0pCiAgICB7CiAgICAgICAgcmVhZGludChsW2ldKTsKICAgICAgICB0b3RMZW4rPWxbaV07CiAgICB9CiAgICBSRVAoaSwxLG0pCiAgICAgICAgcmVhZGludChjW2ldKTsKICAgIFJFUChpLDEsbikKICAgIHsKICAgICAgICByZWFkaW50KGFbaV0pOwogICAgICAgIG5leHRbaV09YmVnaW5bYVtpXV07CiAgICAgICAgYmVnaW5bYVtpXV09aTsKICAgIH0KICAgIGZvcihpPTE7aTw9bTsrK2kpCiAgICB7CiAgICAgICAgaW50IHU9YmVnaW5bY1tpXV0sdixudW09MTsKICAgICAgICBpbnQgbGFzdD1uKzE7CiAgICAgICAgZm9yKHY9dSxudW09MTtudW08bFtpXSAmJiB2OysrbnVtLHY9bmV4dFt2XSkKICAgICAgICAgICAgOwogICAgICAgIGlmKG51bTxsW2ldKQogICAgICAgICAgICBicmVhazsKICAgICAgICBmb3IoO3Y7dj1uZXh0W3ZdKQogICAgICAgIHsKICAgICAgICAgICAgLy92Pj14Pm5leHRbdl0KICAgICAgICAgICAgLy9sYXN0PngrdG90TGVuLTE+PXUKICAgICAgICAgICAgaW50IGw9bWF4KG5leHRbdl0rMSx1KzEtdG90TGVuKTsKICAgICAgICAgICAgaW50IHI9bWluKHYsbGFzdCsxLXRvdExlbi0xKTsKICAgICAgICAgICAgaWYobDw9cikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYWRkW2xdKys7CiAgICAgICAgICAgICAgICBhZGRbcisxXS0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhc3Q9dTsKICAgICAgICAgICAgdT1uZXh0W3VdOwogICAgICAgIH0KICAgIH0KICAgIGludCBub3c9MCxhbnM9MDsKICAgIFJFUChpLDEsbikKICAgIHsKICAgICAgICBub3crPWFkZFtpXTsKICAgICAgICBpZihub3c9PW0pCiAgICAgICAgICAgICsrYW5zOwogICAgfQogICAgcHJpbnRmKCIlZFxuIixhbnMpOwogICAgcmV0dXJuIDA7Cn0K