#include <bits/stdc++.h>
using namespace std;
const int N = 100 * 1000 + 5, M = 200 * 1000 + 5, LG = 20;
pair<int, pair<int, int> > inc[M];
vector<pair<int, int> > adj[N];
int par[N];
int dp[N][LG + 3];
int h[N];
long long mx[N][LG + 3];
int get_par(int v) {
  if (par[v] == v) {
    return v;
  }
  return par[v] = get_par(par[v]);
}
void dfs(int v) {
  for (auto p : adj[v]) {
    int u = p.first, w = p.second;
    if (dp[u][0] == 0) {
      dp[u][0] = v;
      mx[u][0] = w;
      h[u] = h[v] + 1;
      dfs(u);
    }
  }
}
long long lca(int u, int v) {
  if (h[u] > h[v]) {
    swap(u, v);
  }
  long long ans = 0;
  for (int i = LG - 1; i >= 0; i--) {
    if (h[v] - h[u] >= (1 << i)) {
      ans = max(ans, mx[v][i]);
      v = dp[v][i];
    }
  }
  if (u == v) {
    return ans;
  }
  for (int i = LG - 1; i >= 0; i--) {
    if (dp[v][i] != dp[u][i]) {
      ans = max(ans, mx[v][i]);
      ans = max(ans, mx[u][i]);
      v = dp[v][i];
      u = dp[u][i];
    }
  }
  ans = max(ans, mx[v][0]);
  ans = max(ans, mx[u][0]);
  return ans;
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> inc[i].second.first >> inc[i].second.second >> inc[i].first;
  }
  sort(inc, inc + m);
  for (int i = 1; i <= n; i++) {
    par[i] = i;
  }
  long long s = 0;
  int np = n;
  for (int i = 0; i < m; i++) {
    int u = inc[i].second.first, v = inc[i].second.second, w = inc[i].first;
    if (get_par(u) != get_par(v)) {
      par[get_par(u)] = get_par(v);
      s += w;
      np--;
      adj[u].push_back({v, w});
      adj[v].push_back({u, w});
    }
  }
  if (np == 1) {
    dp[1][0] = 1;
    dfs(1);
    for (int j = 1; j < LG; j++) {
      for (int i = 1; i <= n; i++) {
        int u = dp[i][j - 1];
        dp[i][j] = dp[u][j - 1];
        mx[i][j] = max(mx[i][j - 1], mx[u][j - 1]);
      }
    }
  }
  int q;
  cin >> q;
  for (int i = 0; i < q; i++) {
    int u, v;
    cin >> u >> v;
    if (np > 2) {
      cout << -1 << endl;
    }
    if (np == 2) {
      if (get_par(u) != get_par(v)) {
        cout << s << endl;
      } else {
        cout << -1 << endl;
      }
    }
    if (np == 1) {
      cout << s - lca(u, v) << endl;
    }
  }
  return 0;
}
