program truck; type edgee=^edge; edge=record adj,w:longint; next:edgee; end; var dp,mm:array[1..10000,0..15]of longint; a:array[1..10000]of edgee; v:array[1..10000]of boolean; f,d:array[1..10000]of longint; e:array[1..50000,1..3]of longint; n,i,j,k,m,l,q,ans,x,y:longint; c:edgee; function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end; procedure sort(h,l:longint); var i,j,m:longint; k:array[1..3]of longint; begin i:=h; j:=l; m:=e[(i+j)div 2,3]; while i<j do begin while e[i,3]<m do inc(i); while e[j,3]>m do dec(j); if i<=j then begin k:=e[i]; e[i]:=e[j]; e[j]:=k; inc(i); dec(j); end; end; if i<l then sort(i,l); if j>h then sort(h,j); end; function find(x:longint):longint; begin if f[x]=x then exit(x); f[x]:=find(f[x]); exit(f[x]); end; procedure dfs(x,i:longint); var j:edgee; k:longint; begin v[x]:=true; d[x]:=i; j:=a[x]; while j<>nil do begin if not v[j^.adj] then begin dp[j^.adj,0]:=x; mm[j^.adj,0]:=j^.w; k:=0; while dp[dp[j^.adj,k],k]<>0 do begin dp[j^.adj,k+1]:=dp[dp[j^.adj,k],k]; mm[j^.adj,k+1]:=min(mm[j^.adj,k],mm[dp[j^.adj,k],k]); inc(k); end; dfs(j^.adj,i+1); end; j:=j^.next; end; end; begin readln(n,m); for i:=1 to m do read(e[i,1],e[i,2],e[i,3]); for i:=1 to n do f[i]:=i; sort(1,m); k:=0; for i:=m downto 1 do if find(e[i,1])<>find(e[i,2]) then begin f[find(e[i,2])]:=find(e[i,1]); new(c); c^.adj:=e[i,2]; c^.w:=e[i,3]; c^.next:=a[e[i,1]]; a[e[i,1]]:=c; new(c); c^.adj:=e[i,1]; c^.w:=e[i,3]; c^.next:=a[e[i,2]]; a[e[i,2]]:=c; inc(k); if k=n-1 then break; end; for i:=1 to n do if not v[i] then dfs(i,0); readln(q); for i:=1 to q do begin readln(x,y); if find(x)<>find(y) then begin writeln(-1); continue; end; if d[x]<d[y] then begin l:=x; x:=y; y:=l; end; ans:=maxlongint; l:=d[x]-d[y]; k:=0; while l<>0 do begin if l and 1=1 then begin ans:=min(ans,mm[x,k]); x:=dp[x,k]; end; l:=l shr 1; inc(k); end; k:=0; while x<>y do begin if (dp[x,k]<>dp[y,k])or(k=0) then begin ans:=min(ans,min(mm[x,k],mm[y,k])); x:=dp[x,k]; y:=dp[y,k]; inc(k); end else dec(k); end; writeln(ans); end; end. /************************************************************** Problem: 2326 User: admin Language: Pascal Result: Wrong Answer ****************************************************************/