#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 2e5 + 5;
const ll mod = 998'244'353;

ll mpow(ll a, ll b) {
    if (b == 0) return 1LL;
    if (b % 2) {
        return (a * mpow(a, b - 1)) % mod;
    } else {
        ll x = mpow(a, b / 2);
        return (x * x) % mod;
    }
}

vector<int> g[maxn];

int main() {
    int n, k;
    cin >> n >> k;
    vector<bool> in(n, false);
    for (int i = 0; i < k; ++i) {
        int x;
        cin >> x;
        x--;
        in[x] = true;
    }
    for (int i = 1; i < n; ++i) {
        int v;
        cin >> v;
        v--;
        g[i].push_back(v);
        g[v].push_back(i);
    }
    if (k == 1) {
        int s = -1;
        for (int v = 0; v < n; ++v) {
            if (in[v]) s = v;
        }
        if (s != 0) {
            cout << mpow(2, g[s].size()) - g[s].size();
        } else {
            cout << mpow(2, g[s].size() + 1) - g[s].size() - 1;
        }
        return 0;
    }
    // bool flg = true;
    // for (int i = 0; i < n; ++i) {
    //     if (g[i].size() > 2) flg = false;
    // }
    // if (flg) {
    //     ll ans = 0;
    //     ll cnt = 0;
    //     ll d = 0;
    //     for (int i = n - 1; i >= 0; --i) {
    //         if (!in[i]) cnt++;
    //         else {
    //             ans += mpow(cnt, k - d + 1);
    //             cnt = 0;
    //             d++;
    //         }
    //     }
    //     cout << ans;
    //     return 0;
    // }
}