7d059bf4317bc09c7eb4da49b914bef8f16c27f684b6a31f5dab8dd3b2ce0a1f
// https://szkopul.edu.pl/problemset/problem/vi23594m9-57bDiIC-M_ydYe/site/?key=statement
#include <bits/stdc++.h>
// #define GARY_DBG
#define GARY_LIB
constexpr int sizik = 1000 * 1001, sizik2 = 22;
#define ar std::array
typedef std::vector<std::vector<int>> _kra;
std::vector<std::pair<int, int>> kra[sizik];
std::vector<int> kra1[sizik];
int tin[sizik], low[sizik], curr;
int pre[sizik], post[sizik], timer;
int up[sizik][sizik2];
int pref[sizik], orog[sizik];
bool isBridge[sizik];
void DFS1(int v, int edge_id, int p) {
low[v] = tin[v] = ++curr;
pre[v] = ++timer;
up[v][0] = p;
for (int i = 1; i < sizik2; i++) {
up[v][i] = up[up[v][i - 1]][i - 1];
}
for (const auto& [u, id] : kra[v]) {
if (edge_id == id) continue;
if (tin[u] > 0) {
low[v] = std::min(low[v], tin[u]);
} else {
kra1[v].push_back(u);
kra1[u].push_back(v);
DFS1(u, id, v);
low[v] = std::min(low[v], low[u]);
if (low[u] > tin[v]) {
isBridge[id] = 1;
}
}
}
post[v] = ++timer;
}
bool is_ancestor(int v, int u) {
return pre[v] <= pre[u] && post[u] <= post[v];
}
int lca(int a, int b) {
if (is_ancestor(a, b)) return a;
if (is_ancestor(b, a)) return b;
for (int i = sizik2 - 1; i >= 0; i--) {
if (!is_ancestor(up[a][i], b)) {
a = up[a][i];
}
}
return up[a][0];
}
int parent_lca(int a, int b) {
int l = lca(a, b);
if (l == 1) return 0;
return up[l][0];
}
void DFS2(int v, int p) {
pref[v] += pref[p];
for (const auto& u : kra1[v]) {
if (u == p) continue;
DFS2(u, v);
}
}
int query(int a, int b) {
int l = lca(a, b);
int x = pref[a] + pref[b] - 2 * pref[l] + orog[l];
return x;
}
void solve() {
int n, m;
std::cin >> n >> m;
for (int i = 1; i <= m; i++) {
int a, b;
std::cin >> a >> b;
kra[a].push_back({b, i});
kra[b].push_back({a, i});
}
DFS1(1, -1, 1);
int wyn = 0;
for (int i = 1; i <= n; i++) {
orog[i] = pref[i] = 1;
for (const auto& [u, id] : kra[i]) {
if (!isBridge[id]) {
wyn++;
orog[i] = pref[i] = 0;
break;
}
}
}
DFS2(1, -1);
std::cout << wyn << '\n';
int q;
std::cin >> q;
for (; q > 0; q--) {
int x, y;
std::cin >> x >> y;
int res = query(x, y);
int ans = wyn + res;
std::cout << ans << '\n';
}
}
int32_t main() {
#ifndef GARY_DBG
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
#endif
int t = 1;
// std::cin >> t;
for (; t > 0; t--) {
solve();
}
return 0;
}