qwq
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
const int N=1e5+10;
int n,m,sz[N],fa[N],ch[N][2],r[N];
#define ls(x) ch[x][0]
#define rs(x) ch[x][1]
int Fa[N];
int find(int x){
if(x==Fa[x])return x;
else{
return Fa[x]=find(Fa[x]);
}
}
void pushup(int x){
sz[x]=sz[ls(x)]+sz[rs(x)]+1;
}
void rev(int x){
if(!x)return;
r[x]^=1;
swap(ls(x),rs(x));
}
void pushdown(int x){
if(r[x]){
rev(ls(x));rev(rs(x));
r[x]=0;
}
}
int ident(int x){
return rs(fa[x])==x;
}
int nrt(int x){
return rs(fa[x])==x||ls(fa[x])==x;
}
void upd(int x){
if(nrt(x)){
upd(fa[x]);pushdown(x);
}else{
pushdown(x);return;
}
}
void con(int x,int y,int z){
fa[x]=y;
ch[y][z]=x;
}
void rotate(int x){
int y=fa[x],z=fa[y],id=ident(x),idy=ident(y);
int c=ch[x][id^1];
fa[x]=z;
if(nrt(y))con(x,z,idy);
con(c,y,id);
con(y,x,id^1);
pushup(y);pushup(x);
}
void splay(int x){upd(x);
while(nrt(x)){
int y=fa[x];
if(nrt(y)){
rotate(ident(x)==ident(y)?y:x);
}rotate(x);
}
}
void access(int x){int c=0;
while(x){splay(x);
int y=find(fa[x]);rs(x)=c;pushup(x);
c=x;x=y;
}
}
void makert(int x){
access(x);splay(x);rev(x);
}
int findrt(int x){
access(x);splay(x);
while(ls(x)){
pushdown(x);x=ls(x);
}splay(x);
return x;
}
void split(int x,int y){
makert(x);access(y);splay(y);
}
void link(int x,int y){
makert(x);if(findrt(y)!=x){
fa[x]=y;
}
}
void cut(int x,int y){
makert(x);access(y);
if(findrt(y)==x&&fa[y]==x&&!ls(y)){
fa[y]=0;ch[x][1]=0;pushup(x);
}
}
void comb(int x,int y){
if(!x)return;
Fa[find(x)]=y;
comb(ls(x),y);comb(rs(x),y);
}
map<int,int> mp[N];
void print(int x){
if(x>>1)print(x>>1);
if(x&1)cout<<1;else cout<<0;
}
signed main(){
cin>>n>>m;
rep(i,1,n)Fa[i]=i,pushup(i);
rep(i,1,m){
int u,v;cin>>u>>v;
if(mp[u][v])continue;
u=find(u),v=find(v);
if(findrt(u)!=findrt(v)){
link(u,v);
}else{
split(u,v);
comb(v,u);
splay(u);rs(u)=0;pushup(u);
}
mp[u][v]++;mp[v][u]++;
}
int q;cin>>q;
while(q--){
int u,v;cin>>u>>v;
u=find(u),v=find(v);
split(u,v);
print(sz[v]);cout<<'\n';
}
}