#include<bits/stdc++.h>usingnamespacestd;/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/constintN=5e5+5;intn,m;intsiz[N],sum[N];vector<int>v[N];namespaceTAR{vector<int>v[N];vector<int>div[N];intidx,cnt;intdfn[N],low[N];inttop,st[N];intesum[N];voidTarjan(intx){dfn[x]=low[x]=++idx;st[++top]=x;for(autoy:v[x]){if(!dfn[y]){Tarjan(y);low[x]=min(low[x],low[y]);if(low[y]>=dfn[x]){intz;cnt++;do{z=st[top--];::v[cnt].push_back(z);::v[z].push_back(cnt);div[cnt].push_back(z);siz[cnt]++;}while(z!=y);::v[cnt].push_back(x);::v[x].push_back(cnt);div[cnt].push_back(x);siz[cnt]++;}}elselow[x]=min(low[x],dfn[y]);}}voidGetsiz(){bitset<N>in;for(inti=n+1;i<=cnt;i++){in.reset();for(autox:div[i])in[x]=1;for(autox:div[i]){for(autoy:v[x]){if(in[y]==0)continue;esum[i]++;}}esum[i]>>=1;}}}namespaceLCA{intdep[N];intfa[N][20];voidbuild(intx,intf=0){dep[x]=dep[f]+1;fa[x][0]=f;for(inti=1;i<20;i++)fa[x][i]=fa[fa[x][i-1]][i-1];for(autoy:v[x]){if(y==f)continue;build(y,x);}}intlca(intx,inty){if(dep[x]<dep[y])swap(x,y);for(inti=19;i>=0;i--)if(dep[fa[x][i]]>=dep[y])x=fa[x][i];if(x==y)returnx;for(inti=19;i>=0;i--)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];returnfa[x][0];}}/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/voiddfs(intx,intfa){sum[x]+=(siz[x]!=2&&x>n)?TAR::esum[x]:0;for(autoy:v[x]){if(y==fa)continue;sum[y]+=sum[x];dfs(y,x);}}intquery(intx,inty){intlca=LCA::lca(x,y);returnsum[x]+sum[y]-sum[lca]-sum[LCA::fa[lca][0]];}/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/signedmain(){cin>>n>>m;for(inti=1;i<=m;i++){intx,y;cin>>x>>y;TAR::v[x].push_back(y);TAR::v[y].push_back(x);}TAR::cnt=n;TAR::Tarjan(1);TAR::Getsiz();LCA::build(1);dfs(1,0);intq;cin>>q;while(q-->0){intx,y;cin>>x>>y;cout<<query(x,y)<<'\n';}return0;}