#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct zx{
long long f,t,w;
}e[120000];
ll n,m,v,u,w,p[12000],o[12000],h[120000],t,ans;
int x,y;
void add(int xx,int yy,int ww){
++t;
e[t].f=xx;
e[t].t=yy;
e[t].w=ww;
}
bool cmp(zx a,zx b){
return a.w>b.w;
}
int find(int op){
if(p[op]!=op) return find(p[op]);
return op;
}
//void k(){
// int tot=0;
// int ans=0;
// for(int i=1)
//
//}
int main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&v,&u,&w);
add(min(v,u),max(v,u),w);
}
sort(e+1,e+1+m,cmp);
cout<<e[1].f<<" "<<e[1].t<<endl;
for(int i=1;i<=n;i++){
if(find(e[i].f)==find(e[i].t)) continue;
else{
p[e[i].f]=e[i].t;
o[e[i].f]=e[i].w;
}
}
scanf("%lld",&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
if(find(x)!=find(y))cout<<-1<<endl;
else{
while(p[x]!=x){
ans=min(ans,o[x]);
x=p[x];
}
while(p[y]!=y){
ans=min(ans,o[y]);
y=p[y];
}
cout<<ans<<endl;
}
}
return 0;
}
/**************************************************************
Problem: 1420
User: wuhanyu
Language: C++
Result: Wrong Answer
****************************************************************/