#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;


vector<vector<int>> Adj;
vector<char> valid;

vector<char> vis;
int sol=0;

void dfs(int x){
    vis[x]=1;
    for(int i : Adj[x])
        if(!vis[i]){
            valid[i]=false;
            ++sol;
            dfs(i);
        }
}


int main()
{
    int n,k; cin>>n>>k;

    Adj.resize(n+1);
    vis.resize(n+1);
    valid.resize(n+1,0);

    vector<int> x(k);
    for(int i=0;i<k;++i){
        cin>>x[i];
        valid[x[i]]=1;
    }

    while(cin.get()!='\n') ;

    string buff;
    for(int i=0;i<n;++i){
        int from; cin>>from;
        getline(cin,buff);

        istringstream iss(buff);
        int to;
        while(iss>>to){ Adj[from].push_back(to); valid[to]=0;}
    }

    int mx=0;
    int imx=n+1;
    int st;

    for(int i=0;i<k;++i)
        if(valid[ st=x[i] ]){
            fill(vis.begin(),vis.end(),0);
            sol=0;
            dfs(st);
            if(sol>mx || (sol==mx&&imx>st)){
                mx=sol; imx=st;
            }
        }

    cout<<imx<<'\n';
}