#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pi acos(-1.0)
#define e exp(1.0)
const ll maxv=50;
ll N,M;
vector<ll>G[maxv];
vector<ll>RG[maxv];
vector<ll>vs;
bool used[maxv];
ll A[maxv],B[maxv];
ll cmp[maxv];
void DFS(ll u)
{
used[u]=1;
for(ll i=0;i<G[u].size();i++)
{
ll v=G[u][i];
if(!used[v])
DFS(v);
}
vs.push_back(u);
}
void RDFS(ll u,ll k)
{
used[u]=1;
cmp[u]=k;
for(ll i=0;i<RG[u].size();i++)
{
if(!used[RG[u][i]])
RDFS(RG[u][i],k);
}
return ;
}
ll SCC()
{
ll i,j;
memset(used,0,sizeof(used));
for(i=0;i<N;i++)
{
if(!used[i])
DFS(i);
}
memset(used,0,sizeof(used));
ll k=0;
for(i=vs.size()-1;i>=0;i--)
{
if(!used[vs[i]])
RDFS(vs[i),k++);
}
return k;
}
int main()
{
ios::sync_with_stdio(false);
cin>>N>>M;
ll i,j,u,v;
for(i=0;i<M;i++)
cin>>A[i];
for(i=0;i<M;i++)
cin>>B[i];
for(i=0;i<M;i++)
{
G[A[i]-1].push_back(B[i]-1);
RG[B[i]-1].push_back(A[i]-1);
}
ll k=SCC();
ll num=0;
for(i=0;i<N;i++)
{
if(cmp[i]==k-1)
{
u=i;
num++;
}
}
memset(used,0,sizeof(used));
RDFS(u,0);
for(i=0;i<N;i++)
{
if(!used[i])
{
num=0;
break;
}
}
cout<<num<<endl;
return 0;
}