#include<bits/stdc++.h>
using namespace std;
using ld = long double;
const int maxn = 1e6;
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n,m,u,v; cin >> n >> m;
	vector<ld> c(n), e(n, -1);
	vector<vector<int>> g(n);
	for(auto &x : c) cin >> x;
	while(m--) cin >> u >> v, g[u].push_back(v);

	stack<int> s;
	s.push(0);
	vector<bool> visited(n, false);

	while (!s.empty()) {
		int u = s.top();
		s.pop();
		if(visited[u]){
			e[u] = c[u];
			for(auto v : g[u])
				e[u] = max(e[u], max(e[v], c[u] + e[v]/2));
		} else {
			visited[u] = true;
			s.push(u);
			for(auto v : g[u]) s.push(v);
		}
	}
	cout << setprecision(15) << e[0] << endl;
	return 0;
}
