{
TASK: move
LANG:PASCAL
}

type
 tn = 1..100 {10}; {v}
 tm = 1..1000 {100}; {r}
 tp = tn;    {p}
 tl = 0..100{tn};    {l}

var
 n, j, k : tn;
 m, i : tm;
 ra, rb : array[tm] of tn;
 p : array[tn] of tp;
 b : boolean;

 s : word {tl};

 a : array[tn, tn] of tl;

Begin
 readln(n, m);
 for i := 1 to m do readln(ra[i], rb[i]);
 for j := 1 to n do read(p[j]);

 {FillChar(a, sizeof(a), 0);}
 for j := 1 to n do
  for k := 1 to n do
   byte(a[j, k]) := 101;

 {for i := 1 to m do
 Begin

 end;}

 Repeat
  {
  for j := 1 to n do
   for k := 1 to k do
    if
  }
  b := true;

  for i := 1 to m do
  Begin
   for j := 1 to n do
   Begin
    {if ra[i] = j then ;}
    {if a[ra[i], ]=0 then ;}
    s := a[rb[i], j] + 1;

    if s < a[ra[i], j] then
    Begin
     b := false;
     a[ra[i], j] := s;
     a[j, ra[i]] := s;
    end;

    s := a[ra[i], j] + 1;

    if s < a[rb[i], j] then
    Begin
     b := false;
     a[rb[i], j] := s;
     a[j, rb[i]] := s;
    end;

   end;
  end;

  {for j := 1 to n do
  Begin
   for i := 1 to m do
    if a[j, ra[i]] = 0 then ;
  end;
  }
 Until b;

 s := 0;
 for j := 1 to n do
  for k := 1 to k do
   Inc(s, a[j, k]);

 writeln(s);
end.