#include using namespace std; const int MAX_N = 5005; vector G[MAX_N]; bitset bi[MAX_N]; bool vis[MAX_N], isX[MAX_N]; void init() { for (int i = 0; i < MAX_N; ++i) { G[i].clear(); bi[i].reset(); bi[i].set(i); vis[i] = false; } } void dfs(int cur) { vis[cur] = true; int size = G[cur].size(); for (int i = 0; i < size; i++) { int now = G[cur][i]; if (!vis[now]) dfs(now); bi[cur] |= bi[now]; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k, num, x; while (~scanf("%d %d", &n, &k)) { init(); for (int i = 0; i < k; ++i) { scanf("%d", &num); isX[num] = true; } string s; for (int i = 1; i <= n; ++i) { scanf("%d", &num); getline(cin, s); stringstream ss(s); while (ss >> x) G[num].push_back(x); } int ans = 0, id; for (int i = 1; i <= n; ++i) { if (!vis[i]) dfs(i); int tmp = bi[i].count(); if (isX[i] && (tmp > ans || (tmp == ans && i < id))) { ans = tmp; id = i; } } printf("%d\n", id); } return 0; }