#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 700;
vector<pair<long long, long long> > v[N];
vector<pair<long long, pair<long long, long long> > > e;
long long par[25][N], pr[N], vis[N], rm[25][N], sum;
long long find(long long x) {
  if (pr[x] == x) return x;
  return pr[x] = find(pr[x]);
}
void Union(long long x, long long y, long long c) {
  long long xx = find(x), yy = find(y);
  if (xx != yy) {
    pr[xx] = yy;
    v[x].push_back({y, c});
    v[y].push_back({x, c});
    sum += c;
  }
}
long long dis[N];
void dfs(long long x) {
  vis[x] = true;
  for (long long i = 1; i < 22; i++) {
    par[i][x] = par[i - 1][par[i - 1][x]];
    if (par[i][x] != 0) rm[i][x] = max(rm[i - 1][x], rm[i - 1][par[i - 1][x]]);
  }
  for (auto i : v[x])
    if (!vis[i.first]) {
      par[0][i.first] = x;
      rm[0][i.first] = i.second;
      dis[i.first] = dis[x] + 1;
      dfs(i.first);
    }
}
long long solve(long long xx, long long yy) {
  long long x = xx, y = yy, LCA;
  if (dis[x] < dis[y]) swap(x, y);
  for (long long i = 22; i >= 0; i--)
    if ((dis[x] - (1 << i)) >= dis[y]) x = par[i][x];
  if (x == y)
    LCA = x;
  else {
    for (long long i = 22; i >= 0; i--)
      if (par[i][x] != par[i][y]) x = par[i][x], y = par[i][y];
    LCA = par[0][x];
  }
  long long ansx = 0, ansy = 0;
  x = xx, y = yy;
  for (long long i = 22; i >= 0; i--) {
    if (dis[x] - (1 << i) >= dis[LCA])
      ansx = max(ansx, rm[i][x]), x = par[i][x];
    if (dis[y] - (1 << i) >= dis[LCA])
      ansy = max(ansy, rm[i][y]), y = par[i][y];
  }
  return sum - max(ansy, ansx);
}
int32_t main() {
  ios::sync_with_stdio(0);
  long long n, m;
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) pr[i] = i;
  for (long long i = 0; i < m; i++) {
    long long x, y, c;
    cin >> x >> y >> c;
    e.push_back({c, {x, y}});
  }
  sort(e.begin(), e.end());
  for (long long i = 0; i < ((long long)e.size()); i++)
    Union(e[i].second.second, e[i].second.first, e[i].first);
  long long cnt = 0;
  for (long long i = 1; i <= n; i++)
    if (!vis[i]) {
      cnt++;
      dfs(i);
    }
  long long q;
  cin >> q;
  if (cnt > 2) {
    for (long long i = 0; i < q; i++) cout << -1 << '\n';
    return 0;
  }
  if (cnt == 2) {
    for (long long i = 0; i < q; i++) {
      long long x, y;
      cin >> x >> y;
      if (find(x) == find(y))
        cout << "-1\n";
      else
        cout << sum << '\n';
    }
    return 0;
  }
  while (q--) {
    long long x, y;
    cin >> x >> y;
    cout << solve(x, y) << '\n';
  }
}
