#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctype.h>
#include <cstring>
#include <string>
#include <ctime>
#include <cassert>
#include <utility>

using namespace std;

#define MAXN 5005
#define MAXL 30000

int N, K;
int X[MAXN];
vector<int> A[MAXN];
char line[MAXL];
int mem[MAXN];

int go(int node) {
    if(mem[node] > -1)
        return mem[node];
    
    int ret = 0;
    for(vector<int> :: iterator it = A[node].begin(); it != A[node].end(); it++) {
        ret += 1 + go(*it);
    }
    
    mem[node] = ret;
    return ret;
}

int main() {
//	freopen("date.in", "r", stdin);
//	freopen("date.out","w", stdout);
	
	scanf("%d %d", &N, &K);	
	for(int i = 0; i < K; i++)
        scanf("%d", &X[i]);
        
	fgets(line, sizeof(line), stdin);
	for(int i = 0; i < N; i++) {
        fgets(line, sizeof(line), stdin);
        int j = 0;
        int id = -1;
        while(line[j] != '\0' && line[j] != '\n') {
            while(!isdigit(line[j]) && line[j] != '\0' && line[j] != '\n')
                j++;
            if(line[j] == '\0' || line[j] == '\n')
                break;
            
            int crt = 0;
            while(isdigit(line[j])) {
                crt = 10 * crt + line[j] - '0';
                j++;
            }
            
            if(id == -1)
                id = crt;
            else
                A[id].push_back(crt);
        }
	}
	
	fill(mem, mem + MAXN, -1);
	
	int pmin = X[0];
	for(int i = 1; i < K; i++)
        if(go(X[i]) > go(pmin) || (go(X[i]) == go(pmin) && X[i] < pmin))
            pmin = X[i];
    
    printf("%d\n", pmin);
	
	return 0;
}