#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll
int mod = 998'244'353;

int fp(int x, int a) {
    if (a == 0) {
        return 1;
    }
    int f = fp(x, a / 2);
    if (a & 1) {
        return f * f % mod * x % mod;
    } else {
        return f * f % mod;
    }
}

vector<int> fc, rf;

int cnk(int n, int k) {
    return fc[n] * rf[k] % mod % rf[n - k] % mod;
}

struct DSU {
    int n;
    vector<int> p;
    vector<int> rk;
    vector<int> sz;
    vector<vector<int> > dp;

    DSU(int n) : n(n) {
        p.resize(n + 1);
        iota(p.begin(), p.end(), 0);
        rk.resize(n + 1);
        sz.resize(n + 1, 1);
        // dp.resize(n + 1, vector<int>(n + 1));
        // for (int i = 1; i <= n; i++) {
        //     dp[i][0] = 1;
        // }
    }

    int gp(int v) {
        if (p[v] == v) {
            return p[v];
        }
        return p[v] = gp(p[v]);
    }

    void merge(int v, int u) {
        int a = gp(v);
        int b = gp(u);
        if (a == b) {
            return;
        }
        if (rk[a] < rk[b]) {
            swap(a, b);
        }
        if (rk[a] == rk[b]) {
            rk[a]++;
        }
        p[b] = a;
        sz[a] += sz[b];
    }
};

void solve() {
    int n, k;
    cin >> n >> k;
    vector<int> tsk(k + 1);
    vector<int> need(n + 1);
    vector<int> p(n + 1);
    fc.resize(n + 1, 1), rf.resize(n + 1, 1);
    for (int i = 1; i <= n; i++) {
        fc[i] = fc[i - 1] * i % mod;
        rf[i] = fp(fc[i], mod - 2);
    }
    vector<vector<int> > add(n + 1);
    for (int i = 1; i <= k; i++) {
        cin >> tsk[i];
        need[tsk[i]] = 1;
    }
    sort(tsk.begin(), tsk.end());
    for (int i = 2; i <= n; i++) {
        cin >> p[i];
        add[p[i]].emplace_back(i);
    }

    DSU dsu = n;
    int ans = 0;
    for (int i = n; i >= 1; i--) {
        vector<int> szs;
        for (auto u: add[i]) {
            int sz1 = dsu.sz[dsu.gp(u)];
            szs.emplace_back(sz1);
            dsu.merge(i, u);
        }
        if (!need[i]) {
            continue;
        }
        int sz = dsu.sz[dsu.gp(i)];
        (ans += fp(2, sz - 1)) %= mod; // вместе с i
        int all = fp(2, sz - 1) % mod;
        for (auto s: szs) {
            all = (all - fp(2, s) + 1 + mod) % mod; // везде кроме s не пусто
        }
        all = (all - 1 + mod) % mod;
        (ans += all) %= mod;
    }
    cout << ans << "\n";
}

signed main() {
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    int t = 1;
    // cin >> t;
    for (int ts = 1; ts <= t; ts++) {
        solve();
    }
}
