#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;
const int mod = 998244353;

int add(int a, int b) {
    return a + b >= mod ? a + b - mod : a + b;
}
int sub(int a, int b) {
    return a - b < 0 ? a - b + mod : a - b;
}
int mult(int a, int b) {
    return a * 1ll * b % mod;
}
int bpow(int a, int b) {
    int ans = 1;
    while (b) {
        if (b & 1) ans = mult(ans, a);
        a = mult(a, a);
        b >>= 1;
    }
    return ans;
}

vector<vector<int>> g(N);

int sz[N];

int timer = 0;
int tin[N], tout[N];
int up[N][20];

bool upper(int a, int b) {
    return tin[a] <= tin[b] && tout[a] >= tout[b];
}

int lca(int a, int b) {
    if (upper(a, b)) return a;
    if (upper(b, a)) return b;

    for (int i = 19; i >= 0; --i) {
        if (!upper(up[a][i], b)) {
            a = up[a][i];
        }
    }

    return up[a][0];
}

void dfs(int v) {
    tin[v] = timer++;

    sz[v] = 1;
    for (auto& u: g[v]) {
        dfs(u);
        sz[v] += sz[u];
    }

    tout[v] = timer++;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr);

    int n, k;
    cin >> n >> k;

    vector<int> in(k);
    for (int i = 0; i < k; ++i) {
        cin >> in[i];
    }

    for (int i = 2; i <= n; ++i) {
        int p; cin >> p;
        g[p].push_back(i);
    }

    dfs(1);

    if (n <= 10 && k != 1) {
        return 0;
    } else if (k == 1) {
        int v = in[0];
        int ans = bpow(2, sz[v] - 1);
        
        int tot = sz[v] - 1;
        for (auto& u: g[v]) {
            tot -= sz[u];
            ans = add(ans, mult(sub(bpow(2, sz[u]), 1), sub(bpow(2, tot), 1)));
        }

        cout << ans << "\n";
    } else {
        return 0;
    }

    return 0;
}