# include # include # include # include using namespace std; const int MAX_N = 5005; ifstream f("influence.in"); ofstream g("influence.out"); int N, K, sol; int in[MAX_N], special[MAX_N]; vector G[MAX_N]; bool viz[MAX_N]; inline void getmax(int &a, int b) { a = a > b ? a : b; } void dfs(int node) { viz[node] = 1; for (vector :: iterator it = G[node].begin (); it != G[node].end (); ++it) { if (viz[*it] == 0) dfs (*it), ++sol; } } 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 >> value, ++in[value]; G[node].push_back(value); } } int maxi = 0, result = 0; for (int i = 1; i <= K; ++i) if (in[special[i]] == 0) { memset(viz,0,sizeof(viz)); //memset(dp,0,sizeof(dp)); sol = 0, dfs(special[i]); //printf ("%5d %5lld\n", special[i], sol); if (maxi < sol) { maxi = sol; result = special[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] << " "; }*/ //for (int i = 1; i <= N; ++i) //printf ("%lld\n", dp[i]); cout << result; }