#include <bits/stdc++.h>
using namespace std;
#pragma GCC target("avx2")
#pragma GCC optimization("O2")
#pragma GCC optimization("unroll-loops")
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
const int N = 502;
const int M = 10002;
int pref[M][N], suff[M][N];
int n, m;
pair<int, int> ara[M];
int find(int r, int pr[]) {
  if (pr[r] == r)
    return r;
  else
    return pr[r] = find(pr[r], pr);
}
void connect(int a, int b, int pr[]) {
  int u = find(a, pr);
  int v = find(b, pr);
  if (u != v) {
    pr[v] = u;
  }
}
int p1[N], p2[N];
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) pref[0][i] = i, suff[m + 1][i] = i;
  for (int i = 1; i <= m; i++) {
    cin >> ara[i].first >> ara[i].second;
  }
  for (int i = 1; i <= m; i++) {
    for (int j = 1; j <= n; j++) pref[i][j] = find(j, pref[i - 1]);
    connect(ara[i].first, ara[i].second, pref[i]);
  }
  for (int i = m; i >= 1; i--) {
    for (int j = 1; j <= n; j++) suff[i][j] = find(j, suff[i + 1]);
    connect(ara[i].first, ara[i].second, suff[i]);
  }
  int k;
  cin >> k;
  while (k--) {
    int l, r;
    cin >> l >> r;
    for (int i = 1; i <= n; i++) p1[i] = pref[l - 1][i];
    for (int i = 1; i <= n; i++) p2[i] = suff[r + 1][i];
    for (int i = 1; i <= n; i++) {
      int boss = find(i, p2);
      connect(i, boss, p1);
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)
      if (find(i, p1) == i) ans++;
    cout << ans << "\n";
  }
}
