/*
TASK:move
LANG:C++
*/

#include<iostream>
#include<vector>
#include<algorithm>
//#include<conio.h>
using namespace std;

#define maxn 10
#define INF 9999999

int i,j,n,m,cur,red[maxn],spulplace[maxn],pulplace[maxn],best=INF,sposition[maxn],position[maxn],d[maxn],order[maxn],izp[maxn],aa[maxn][maxn],q[maxn][3],br,prev[maxn];
bool used[maxn];
vector< vector<int> >a;

void init(){ //    clrscr();//-----------
//     freopen("inp.txt","rt",stdin);
     cin>>n>>m;
     vector<int>temp;
     int t1,t2;
     for(i=1;i<=n+3;i++)a.push_back(temp);
     for(i=1;i<=m;i++){
     		cin>>t1>>t2;
         a[t1].push_back(t2);
         a[t2].push_back(t1);
         aa[t1][t2]=1;
         aa[t2][t1]=1;
     }
     for(i=1;i<=n;i++){
     	cin>>position[i];
      pulplace[position[i]]=i;
     }
}

void calc(int v){
     if(prev[v]!=1)calc(prev[v]);
     swap(sposition[q[v][1]],sposition[q[v][2]]);
	  spulplace[sposition[q[v][1]]]=q[v][1];
     spulplace[sposition[q[v][2]]]=q[v][2];
}

int bfs(int pos,int v){
	for(j=1;j<=n;j++){q[j][1]=0;q[j][2]=0;used[j]=0;prev[j]=0;d[j]=0;}
   br=0;
	int temp=1,qq;
   q[++br][2]=v;
   used[v]=1;
   while(temp<=br){
        v=q[temp][2];
   	for(qq=0;qq<a[v].size();qq++){
      	if(!used[a[v][qq]]){
                q[++br][1]=q[temp][2];
         	q[br][2]=a[v][qq];
            prev[br]=temp;
            d[br]=d[temp]+1;
            used[a[v][qq]]=1;
            if(q[br][2]==pos){calc(br);return d[br];}
         }
      }
   	temp++;
   }
   return INF;
}

int solve(){
int ans=0,cc;
        for(i=1;i<=n;i++){
        	sposition[i]=position[i];
         spulplace[i]=pulplace[i];
        }
	for(i=1;i<=n;i++){
          cc=bfs(red[i],spulplace[red[i]]);
          if(cc==INF){
          	int u;
            for(u=1;u<n;u++)if(sposition[u]!=u)return INF;
            return ans;
          }
          else ans+=cc;
        }
	return ans;

}


void all(int pos){
     if(pos>n){
               cur=solve();
               best=min(cur,best);
			
     }
     else {
          int qq;
          for(qq=1;qq<=n;qq++)
              if(!izp[qq]){
                 izp[qq]=1;
                 red[pos]=qq;
                 all(pos+1);
                 izp[qq]=0;
              }
     }
}

int main(){
    init();
    if(n*(n-1)/2<=m){cout<<n<<endl;return 0;}
    all(1);
    if(best!=INF)cout<<best<<endl;
    else cout<<"-1\n";
    return 0;
}

