#include using namespace std; #define int long long signed main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int TT; cin>>TT; while(TT--){ int N,M; cin>>N>>M; vector A(N); for(int i=0;i>A[i]; vector> G(N+1); for(int i=0;i>a>>b; a--; b--; G[a].push_back(b); G[b].push_back(a); } int ac = 3e12, wa = -1; while(ac-wa > 1){ int md = (ac+wa)/2; int X = md; vector dist(N+1,1e18); dist[N] = 1; priority_queue,vector>,greater>> pq; pq.push({dist[N],N}); while(!pq.empty()){ auto [w,u] = pq.top(); pq.pop(); if(dist[u] != w) continue; for(auto v:G[u])if((w == 1 || (A[u]-X)*w <= (A[v]-X)*(w-1)) && dist[v] > w+1){ dist[v] = w+1; pq.push({dist[v],v}); } } if(*max_element(dist.begin(),dist.end()) <= 2*N) ac = md; else wa = md; } cout<