#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: 1061
	User: wuhanyu
	Language: C++
	Result: Wrong Answer
****************************************************************/