#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;

void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
}

int n,k;
int u[32];
vector<int> v[32],h[32];
int x[32],p[32];

void read()
{
    cin>>n>>k;
    for(int i=1;i<=k;i++)
    {
        cin>>x[i];
        u[x[i]]=1;
    }

    if(u[1])h[1].push_back(1);
    for(int i=2;i<=n;i++)
    {
        cin>>p[i];
        v[p[i]].push_back(i);
        int ver=i;
        while(ver)
        {
            if(u[ver])h[i].push_back(ver);
            ver=p[ver];
        }
    }
}

int c[32];
bool pos;

set<int> dfs(int i)
{
    int cov=0;
    if(c[i]==i)cov=1;

    set<int> s;
    s.insert(c[i]);

    for(int j=0;j<v[i].size();j++)
    {
        int nb=v[i][j];
        set<int> s1=dfs(nb);
        if(s.find(i)!=s.end()&&s1.find(i)!=s1.end())
            cov=1;
        for(auto it=s1.begin();it!=s1.end();it++)
            s.insert(*it);
    }

    if(u[i]&&!cov)pos=0;
    return s;
}

int cnt;
void check()
{
    pos=1;
    dfs(1);
    if(pos)cnt++;
}

void rec(int i)
{
    //cout<<i<<endl;
    if(i==n+1)
    {
        check();
        return;
    }

    c[i]=0;
    rec(i+1);

    for(int j=0;j<h[i].size();j++)
    {
        c[i]=h[i][j];
        rec(i+1);
    }
}

int main()
{
    speed();
    read();
    rec(1);
    cout<<cnt<<endl;
    return 0;
}
