# include <fstream>
# include <iostream>
# include <vector>
using namespace std;

const int MAX_N = 5005;

//ifstream f("influence.in");
//ofstream g("influence.out");

int N, K;
int in[MAX_N], special[MAX_N];
long long dp[MAX_N];
vector<int> G[MAX_N];
bool viz[MAX_N];

inline void getmax(int &a, int b) {
    a = a > b ? a : b;
}

void dfs(int node, int level) {
    dp[node] = 0, viz[node] = 1;
    for (vector <int> :: iterator it = G[node].begin (); it != G[node].end (); ++it) {
        if (viz[*it] == 0)
            dfs (*it, level + 1);
        dp[node] += dp[*it] + 1;
    }
}

int main (void) {
    cin >> N >> K;
    for (int i = 1; i <= K; ++i)
        cin >> special[i];
    for (int i = 1, node; i <= N; ++i) {
        cin >> node;
        for (int value = 0; cin.peek () != '\n' && !cin.eof(); ) {
            cin >> value, ++in[value];
            G[node].push_back(value);
        }
    }
    for (int i = 1; i <= N; ++i)
        if (in[i] == 0)
            G[0].push_back(i);
    /*for (int i = 0; i <= N; ++i, g << "\n") {
        g << "node = " << i << ": ";
        for (int j = 0; j < G[i].size (); ++j)
            g << G[i][j] << " ";
    }*/
    dfs(0, 0);
    //for (int i = 1; i <= N; ++i)
        //printf ("%lld\n", dp[i]);
    int maxi = 0, result = 0;
    for (int i = 1; i <= K; ++i)
        if (maxi < dp[special[i]]) {
            maxi = dp[special[i]];
            result = special[i];
        }
    cout << result;
}