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

#include <iostream>
#include <queue>
#include <vector>
#include <map>
//#include <conio.h>
#include <algorithm>
using namespace std;
int N,M;
int a[10][10];

int n[10];

struct A
{
int v[10];
int br;
int p1;
bool operator < (A i)
     const {
     //if(i.br<br) return 1;
     //else return 0;
     return lexicographical_compare(i.v+1,i.v+N+1,v+1,v+N+1);
     }
};
map <A,bool> u;
queue <A> q;

void ini()
{
//clrscr();
//freopen("test1.txt","r",stdin);
cin>>N>>M;
          int i,j,c,b;

          for(i=1;i<=M;i++)
             {
              cin>>c>>b;
              a[b][c]=1;
              a[c][b]=1;
              }
          for(i=1;i<=N;i++)
              cin>>n[i];
}

int bfs()
{
A s;
int k,i,j;
for(i=1;i<=N;i++)
    {s.v[i]=n[i];
      if(n[i]==1) k=i;
      }
s.br=0;
s.p1=k;
q.push(s);
u[s]=1;
while(!q.empty())
{
   s=q.front();
     u[s]=1;
            for(i=1;i<=N;i++)
                             {
                             if(a[s.p1][i])
                                         {
                                         A h=s;
                                         int k;
                                         k=h.v[i];
                                         h.v[i]=h.v[s.p1];
                                         h.v[s.p1]=k;
                                       /*  for(j=1;j<=N;j++)
                                                          cout<<h.v[j]<<" ";
                                                          cout<<endl;*/
                                         if(!u[h]){
                                          h.p1=i;
                                          u[h]=1;
                                          h.br=s.br+1;
                                          q.push(h);
                                          int j,s1=1;
                                          for(j=1;j<=N;j++)
                                              if(h.v[j]!=j) {s1=0; break;}
                                              if(s1==1) return h.br;
                                          }
                                          }
                             }
          q.pop();
}

return -1;
}





void outo()
{
cout<<bfs()<<endl;
}




int main()
{
ini();
outo();
return 0;
}
