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
****************************************************************/