type
ar=array[1..1000] of longint;
var
first,last:array [0..10001] of ar;
g:ar;
x,y:array [1..10001] of longint;
n,k,i,j,l,r,x1,y1,ans,m,t:longint;
functionfi(x:longint):longint;
var
y,root,w:longint;
begin
y:=x;
while first[i,y]>0do
y:=first[i,y];
root:=y;
y:=x;
while first[i,y]>0dobegin
w:=first[i,y];
first[i,y]:=root;
y:=w;
end;
fi:=root;
end;
functionfd(x,s:longint):longint;
var
y,root,w:longint;
begin
y:=x;
while last[s,y]>0do
y:=last[s,y];
root:=y;
y:=x;
while last[s,y]>0dobegin
w:=last[s,y];
last[s,y]:=root;
y:=w;
end;
fd:=root;
end;
functionfn(x:longint):longint;
var
y,root,w:longint;
begin
y:=x;
while g[y]>0do
y:=g[y];
root:=y;
y:=x;
while g[y]>0dobegin
w:=g[y];
g[y]:=root;
y:=w;
end;
fn:=root;
end;
procedureun(x,y:longint);var
s,t:longint;
begin
s:=fi(x);
t:=fi(y);
if s<>t then
first[i,s]:=t;
end;
procedureui(x,y:longint);var
s,t:longint;
begin
s:=fd(x,i);
t:=fd(y,i);
if s<>t then
last[i,s]:=t;
end;
procedureuo(x,y:longint);var
s,t:longint;
begin
s:=fn(x);
t:=fn(y);
if s<>t then
g[s]:=t;
end;
begin
assign(input,'connect.in');reset(input);
assign(output,'connect.out');rewrite(output);
readln(n,m);
for i:=1to m do
readln(x[i],y[i]);
for i:=1to m dobegin
first[i]:=first[i-1];
un(x[i],y[i]);
end;
for i:=m downto1dobegin
last[i]:=last[i+1];
ui(x[i],y[i]);
end;
readln(k);
for i:=1to k dobegin
readln(l,r);
ans:=0;
l:=l-1;r:=r+1;
g:=first[l];
for j:=1to n dobegin
x1:=fn(j);
y1:=fd(j,r);
if x1<>y1 then
uo(x1,y1);
end;
for j:=1to n doif g[j]=0then inc(ans);
writeln(ans);
end;
close(input);close(output);
end.