#include<bits/stdc++.h>
using namespace std;
long long n,m,q;
long long dfs[1000005],low[1000005],d_cnt,ccnt;
vector<long long> v[1000005],u[1000005];
stack<long long> s;
void tarjan(long long x){
dfs[x]=low[x]=++d_cnt;
s.push(x);
for(long long i=0;i<v[x].size();i++){
long long y=v[x][i];
if(!dfs[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
if(low[y]==dfs[x]){
ccnt++;
while(s.top()!=x){
long long y=s.top();
s.pop();
u[ccnt].push_back(y);
u[y].push_back(ccnt);
}
u[ccnt].push_back(x);
u[x].push_back(ccnt);
}
}else low[x]=min(low[x],dfs[y]);
}
}
long long size[1000005],dep[1000005],h[1000005],top[1000005],f[1000005],hson[1000005],rnk[1000005],dfn[1000005],cnt;
void dfs1(long long x,long long fa){
size[x]=1;
for(long long i=0;i<u[x].size();i++){
long long y=u[x][i];
if(y==fa) continue;
dep[y]=dep[x]+1;
f[y]=x;
dfs1(y,x);
size[x]+=size[y];
if(size[y]>size[hson[x]]) hson[x]=y;
}
}
void dfs2(long long x,long long t){
top[x]=t;
cnt++;
dfn[x]=cnt;
rnk[cnt]=x;
if(!hson[x]) return;
dfs2(hson[x],t);
for(long long i=0;i<u[x].size();i++){
long long y=u[x][i];
if(y==f[x] || y==hson[x]) continue;
dfs2(y,y);
}
}
long long val[2000005],ls[2000005],rs[2000005],dcnt;
void pushup(long long x){
val[x]=val[ls[x]]+val[rs[x]];
}
void build(long long l,long long r,long long &x){
x=++dcnt;
if(l==r){
val[x]=h[rnk[l]];
return;
}
long long mid=(l+r)>>1;
build(l,mid,ls[x]);
build(mid+1,r,rs[x]);
pushup(x);
}
long long query(long long l,long long r,long long ql,long long qr,long long x){
if(ql<=l && r<=qr) return val[x];
long long mid=(l+r)>>1,ans=0;
if(ql<=mid) ans+=query(l,mid,ql,qr,ls[x]);
if(qr>=mid+1) ans+=query(mid+1,r,ql,qr,rs[x]);
return ans;
}
long long query_line(long long x,long long y){
long long ans=0;
while(top[x]!=top[y]){
if(dep[top[x]]>dep[top[y]]){
ans+=query(1,ccnt,dfn[top[x]],dfn[x],1);
x=f[top[x]];
}else{
ans+=query(1,ccnt,dfn[top[y]],dfn[y],1);
y=f[top[y]];
}
}
if(dep[x]<dep[y]) ans+=query(1,ccnt,dfn[x],dfn[y],1);
else ans+=query(1,ccnt,dfn[y],dfn[x],1);
return ans;
}
long long x,y;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
ccnt=n;
for(long long i=1;i<=m;i++){
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(int i=1;i<=n;i++) h[i]=1;
tarjan(1);
dfs1(1,0);
dfs2(1,0);
build(1,ccnt,x);
cin>>q;
for(long long i=1;i<=q;i++){
cin>>x>>y;
cout<<query_line(x,y)<<'\n';
}
return 0;
}