#include <iostream>
#include <vector>
using namespace std;
const long long M=998244353;
struct mint
{
    long long x;
    mint()
    {
        x=0;
    }
    mint(long long _x)
    {
        x=(_x%M+M)%M;
    }
};
mint operator+(const mint &a,const mint &b)
{
    return mint(a.x+b.x);
}
mint operator-(const mint &a,const mint &b)
{
    return mint(a.x-b.x);
}
mint operator*(const mint&a,const mint &b)
{
    return mint(a.x*b.x);
}
mint binpow(mint a,long long b)
{
    if(b==0)
    {
        return mint(1);
    }
    if(b%2==0)
    {
        mint res=binpow(a,b/2);
        return res*res;
    }
    return binpow(a,b-1)*a;
}
vector<vector<int>> A(1e6);
vector<bool> K(1e6);
int dfs(int u)
{
    if(!K[u])
    {
        int sz=1;
        for(auto &v:A[u])
        {
            sz+=dfs(v);
        }
        return sz;
    }
    vector<int> sz;
    int sum=1;
    for(auto &v:A[u])
    {
        sz.push_back(dfs(v));
        sum+=sz.back();
    }
    mint ans=binpow(mint(2),sum)-mint(1);
    for(auto x:sz)
    {
        ans=ans-(binpow(mint(2),x)-mint(1));
    }
    cout << ans.x;
    exit(0);
}
int main()
{
    int n,k,x,p;
    cin >> n >> k;
    for(int i=0;i<k;i++)
    {
        cin >> x;
        K[x-1]=true;
    }
    for(int i=1;i<n;i++)
    {
        cin >> p;
        A[p-1].push_back(i);
    }
    dfs(0);
    return 0;
}
