#include <bits/stdc++.h>

using namespace std;

const long long MOD = 998244353;

int n, k;
vector<int> ht;
vector<vector<int>> g;

void upd(long long& a, long long b) {
    a = (a + b) % MOD;
}

const int MAXN = 1000010;
long long fac[MAXN];
long long rfac[MAXN];

long long binpow(long long a, long long n) {
    if(n == 0) return 1;
    long long ans = binpow(a, n >> 1);
    ans = (ans * ans) % MOD;
    if(n & 1) ans = (ans * a) % MOD;
    return ans;
}

long long cnk(long long n, long long k) {
    return fac[n] * rfac[k] % MOD * rfac[n - k] % MOD;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    fac[0] = 1;
    for(int i = 1; i < MAXN; i++) fac[i] = fac[i - 1] * i % MOD;
    rfac[MAXN - 1] = binpow(fac[MAXN - 1], MOD - 2);
    for(int i = MAXN - 2; i >= 0; i--) rfac[i] = rfac[i + 1] * (i + 1) % MOD;

    cin >> n >> k;
    ht.resize(n, -1);
    for(int i = 0; i < k; i++) {
        int t;
        cin >> t;
        t--;
        ht[t] = i;
    }
    g.resize(n);
    for(int i = 1; i < n; i++) {
        int p;
        cin >> p;
        p--;
        g[p].push_back(i);
    }

    vector<int> sz(n);
    for(int v = n - 1; v >= 0; v--) {
        sz[v] = 1;
        for(int t : g[v]) sz[v] += sz[t];
    }

    long long ans = 0;
    for(int v = 0; v < n; v++) {
        if(ht[v] != -1) {
            long long cntt = binpow(2, sz[v]);
            upd(cntt, MOD - 1);
            for(int t : g[v]) {
                upd(cntt, MOD - (binpow(2, sz[t]) - 1));
            }
            cntt = (cntt % MOD + MOD) % MOD;
            ans = cntt;
        }
    }
    cout << ans << '\n';
}
