#include <stdio.h>
#include <stdlib.h>

int a[5001][5001];
unsigned short seen[5001], gseen[5001];

int readSpaces() {
    char c;

    while ((c = getc(stdin)) == ' ');
    if ((c == EOF) || (c == '\n'))
        return 1;
    else
        ungetc(c, stdin);

    return 0;
}

void initSeen(int n) {
    int i;

    for (i = 1; i <= n; i++)
        seen[i] = 0;
}

int dfs(int x) {
    int value = 1, i;

    seen[x] = 1;
    gseen[x] = 1;

    for (i = 1; i <= a[x][0]; i++)
        if (!seen[a[x][i]])
            value += dfs(a[x][i]);

    return value;
}

int main()
{
    int n, m, k[5000], i, j, t, eol, value, max = 0, sol;

    scanf("%d%d", &n, &m);

    for (i = 0; i <= n; i++) {
        a[i][0] = 0;
        seen[i] = 0;
        gseen[i] = 0;
    }

    for (i = 0; i < m; i++)
        scanf("%d", &k[i]);

    for (i = 0; i < n; i++) {
        scanf("%d", &j);
        eol = 0;
        while (!eol) {
            eol = readSpaces();
            if (!eol) {
                scanf("%d", &t);
                a[j][++a[j][0]] = t;
            }
        }
    }

    for (i = 0; i < m; i++) {
        if (!gseen[k[i]]) {
            initSeen(n);
            value = dfs(k[i]);
            if (value > max) {
                max = value;
                sol = k[i];
            }
            if (value == max)
                if (k[i] < sol)
                    sol = k[i];
        }

    }

    printf("%d\n", sol);
    return 0;
}