#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+1;
int l[maxn],r[maxn],n,m;
struct node{
int fa[505];
int find_(int x){
if(fa[x]==x) return x;
else return fa[x]=find_(fa[x]);
}
void union_(int a,int b){
int q=find_(a);
int p=find_(b);
if(q>p) swap(q,p);
if(p!=q) fa[p]=q;
}
void init(){
for(int i=1;i<=n;i++) fa[i]=i;
}
};
node d1[maxn],d2[maxn];
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>l[i]>>r[i];
}
d1[0].init();
for(int i=1;i<=m;i++){
d1[i]=d1[i-1];
d1[i].union_(l[i],r[i]);
}
d2[m+1].init();
for(int i=m;i>=1;i--){
d2[i]=d2[i+1];
d2[i].union_(l[i],r[i]);
}
int t;
cin>>t;
for(int i=1;i<=t;i++){
int xx,yy;
cin>>xx>>yy;
node ll=d1[xx-1],rr=d2[yy+1];
node ans=ll;
for(int j=1;j<=n;j++) ans.union_(ans.fa[j],rr.fa[j]);
int x=0;
for(int j=1;j<=n;j++) if(ans.fa[j]==j){
x++;
}
cout<<x<<endl;
}
return 0;
}