#include <fstream>
#include <iostream>
#include <vector>
#include<cstdlib>
#include<cstring>

using namespace std;

const int MAX_N = 5005;

int N, K;
int in[MAX_N];

int special[MAX_N];
vector<int> G[MAX_N];
bool viz[MAX_N];
int v[MAX_N];


void DFS(vector<int>*g,int start ,int cul ,int *v)
{

    v[start]=cul;
        for(vector<int>::iterator i=g[start].begin();i<g[start].end();++i)
            if(!v[*i])
                DFS(g,*i,cul,v);
}



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);

     }
    }

    int maxx = -1;
    int nod;
    for(int i=1 ; i<=K ; i++)
    {

        int cr = 0;
        int root = special[i];
        memset(v,0,sizeof(v));

        DFS(G,root,1,v);

        for(int i=1 ; i<=N ; i++)
                if( v[i] != 0 )
                    ++cr;

        if ( cr > maxx )
                maxx = cr, nod = root;



    }

    cout << nod;

      return 0;
       }