#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > edges;
int p[2][10005][505];
int cleft[10005], cright[10005], cpy[505];
int find_par(int i, int j, int x) {
  if (p[i][j][x] != x) p[i][j][x] = find_par(i, j, p[i][j][x]);
  return p[i][j][x];
}
int main() {
  int n, m, i, j, l1, u, v, t1, t2, qu, l, r;
  cin >> n >> m;
  edges.resize(m + 1);
  for (j = 1; j <= n; j++) p[0][0][j] = j, p[1][m + 1][j] = j;
  for (i = 1; i <= m; i++) {
    cin >> u >> v;
    edges[i] = make_pair(u, v);
    cleft[i] = cleft[i - 1];
    for (j = 1; j <= n; j++) p[0][i][j] = p[0][i - 1][j];
    t1 = find_par(0, i, u);
    t2 = find_par(0, i, v);
    if (t1 != t2) {
      p[0][i][t1] = t2;
      cleft[i]++;
    }
  }
  for (i = m; i >= 1; i--) {
    cright[i] = cright[i + 1];
    for (j = 1; j <= n; j++) p[1][i][j] = p[1][i + 1][j];
    t1 = find_par(1, i, edges[i].first);
    t2 = find_par(1, i, edges[i].second);
    if (t1 != t2) {
      p[1][i][t1] = t2;
      cright[i]++;
    }
  }
  cin >> qu;
  for (l1 = 1; l1 <= qu; l1++) {
    cin >> l >> r;
    for (j = 1; j <= n; j++) cpy[j] = p[0][l - 1][j];
    int coun = cleft[l - 1];
    for (j = 1; j <= n; j++) {
      t1 = find_par(0, l - 1, p[0][l - 1][j]);
      t2 = find_par(0, l - 1, p[1][r + 1][j]);
      if (t1 != t2) {
        p[0][l - 1][t1] = t2;
        coun++;
      }
    }
    for (j = 1; j <= n; j++) p[0][l - 1][j] = cpy[j];
    cout << (n - coun) << endl;
  }
  return 0;
  return 0;
}
