#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
const int mod=998244353;
int n,k,p[1000005],ss[1000005];
vector<int>v[1000005];
long long int otg=1,dp[1000005],step[1000005];
void prec()
{
    step[0]=1;
    for(int i=1;i<=1e6;i++)
    {
        step[i]=(step[i-1]*2)%mod;
    }
}
void dfs(int beg,int par)
{
    int w;
    dp[beg]=1;
    for(int i=0;i<v[beg].size();i++)
    {
        w=v[beg][i];
        if(w!=par)
        {
            dfs(w,beg);
            dp[beg]=dp[beg]+dp[w];
        }
    }
    if(ss[beg])
    {
        dp[beg]--;
        otg=step[dp[beg]];
        for(int i=0;i<v[beg].size();i++)
        {
            w=v[beg][i];
            dp[beg]-=dp[w];
            otg=(otg+(step[dp[w]]-1)*(step[dp[beg]]-1))%mod;
        }
    }
}
void read()
{
    cin>>n>>k;
    int h;
    for(int i=1;i<=k;i++)
    {
        cin>>p[i];
        ss[p[i]]=1;
    }
    for(int i=1;i<n;i++)
    {
        cin>>h;
        v[h].push_back(i+1);
        v[i+1].push_back(h);
    }
    prec();
    dfs(1,1);
    cout<<otg<<endl;
}
int main()
{
    speed();
    read();
	return 0;
}
