1 const INF=2000000000;
2 const maxn=4008;
3 var r:array[0..maxn] of longint;
4 eg:array[0..1000008] of record u,v,w,nt:longint; end;
5 el:longint;
6 lt:array[0..maxn] of longint;
7 h:array[0..maxn] of longint;
8 b:array[0..10008] of longint;
9 i,j,k,n,s,t,m,x,y:longint;
10 function op(i,j:longint):longint; inline;
11 begin
12 exit((i-1)*n+j);
13 end;
14 function calc(x,y:longint):longint; inline;
15 begin
16 exit(trunc(10*ln(233*(x-y)*(x-y)+1)));
17 end;
18 procedure adt(u,v,w:longint);
19 begin
20 inc(el);
21 eg[el].u:=u;
22 eg[el].v:=v;
23 eg[el].w:=w;
24 eg[el].nt:=lt[u];
25 lt[u]:=el;
26 end;
27 procedure add(u,v,w:longint);
28 begin
29 // writeln(u,' ',v,' ',w);
30 adt(u,v,w); adt(v,u,0);
31 end;
32 procedure bfs;
33 var i,l,r,x:longint;
34 begin
35 fillchar(h,sizeof(h),$7f);
36 h[t]:=0;
37 l:=1; r:=1; b[1]:=t;
38 while l<=r do
39 begin
40 x:=b[l];
41 i:=lt[x];
42 while i<>0 do
43 begin
44 if (h[eg[i].v]>=n) and (eg[i xor 1].w>0) then
45 begin
46 inc(r);
47 b[r]:=eg[i].v;
48 h[eg[i].v]:=h[x]+1;
49 end;
50 i:=eg[i].nt;
51 end;
52 inc(l);
53 end;
54 end;
55 function min(a,b:longint):longint; inline;
56 begin
57 if a<b then exit(a) else exit(b);
58 end;
59 function dfs(u,inl:longint):longint;
60 var i,v,outl:longint;
61 begin
62 if u=t then exit(inl);
63 dfs:=0;
64 i:=lt[u];
65 while i<>0 do
66 begin
67 v:=eg[i].v;
68 if (eg[i].w>0) and (h[u]=h[v]+1) then
69 begin
70 outl:=dfs(v,min(eg[i].w,inl));
71 dec(inl,outl);
72 inc(dfs,outl);
73 dec(eg[i].w,outl);
74 inc(eg[i xor 1].w,outl);
75 if inl=0 then break;
76 end;
77 i:=eg[i].nt;
78 end;
79 if inl=0 then h[u]:=-1;
80 end;
81 function dinic:longint;
82 var sum:longint;
83 begin
84 bfs;
85 sum:=0;
86 while h[s]<n do
87 begin
88 sum:=sum+dfs(s,INF);
89 bfs;
90 //writeln(sum);
91 end;
92 exit(sum);
93 end;
94 begin
95 //assign(input,'1.in');reset(input);
96 el:=1;
97 readln(n,m);
98 for i:=1 to n do read(r[i]);
99 s:=0; t:=n*n+1;
100 for i:=1 to n do
101 begin
102 if i=1 then add(s,op(i,1),calc(0,r[i]))
103 else add(s,op(i,1),INF);
104 for j:=2 to n do
105 if i<>1 then
106 add(op(i,j-1),op(i,j),calc(j-1,r[i]))
107 else
108 add(op(i,j-1),op(i,j),INF);
109 if i=1 then add(op(i,n),t,INF) else add(op(i,n),t,calc(n,r[i]))
110 end;
111
112 for i:=1 to m do
113 begin
114 readln(x,y);
115 for k:=2 to n do
116 begin
117 add(op(x,k),op(y,k-1),INF);
118 add(op(y,k),op(x,k-1),INF);
119 end;
120 end;
121 n:=n*n+1;
122 writeln(dinic);
123 end.