/*
TASK:move
LANG:C
*/
#include <stdio.h>
#define SWAP(a, b) temp=a, a=b, b=temp

    int n, m, temp;
    int ind[11]={0};
    int l[101][101];
    int start, st;
    
int isO();

int main() {
    int i, j, k;
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++) {
    	l[i][0]=0;
    }
    for(i=0; i<m; i++) {
       scanf("%d%d",&j, &k);
       l[j][++l[j][0]]=k;
       l[k][++l[k][0]]=j;
    }
    for(i=1; i<=n; i++) {
    	scanf("%d", &ind[i]);
        if(ind[i]==1) start=i;
    }
    if(isO()) {
    	printf("0\n");
        return 0;
    }
    st=0;
	if(move(start, 0)) {printf("%d\n", st);}
    else {printf("-1\n");}
    
	return 0;
}

int isO(){
	int i;
    for(i=1; i<=n; i++) {
     if(i!=ind[i]) return 0;
    }
    return 1;
}

int move(int s, int p) {
    int i, v;
    for(i=1; i<=l[s][0]; i++) {
		v=l[s][i];
        if(v==p) continue;
        SWAP(ind[s], ind[v]);
        st+=1;
        if(isO()) return 1;
       	if(move(v, s)) return 1;
        SWAP(ind[s], ind[v]);
        st-=1;
    }
	return 0;
}
