func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3e5 + 10;   long long n, m, q, u, v, l, r, c, res, sum[N], p[N], lmt[N], vst[N];   vector<long long> adj[N], vec;   void dfs(int u, int p) {     vst[u] = 1;     vec.push_back(u);     for (auto v : adj[u]) {       if (vst[v] == 2) continue;       if (vst[v] == 1) {         if (v != p) {           long long mn = u;           long long mx = u;           for (int j = vec.size() - 1; j >= 0; j--) {             mn = min(mn, vec[j]);             mx = max(mx, vec[j]);             if (vec[j] == v) break;           }           lmt[mn] = min(lmt[mn], mx - 1);         }       } else         dfs(v, u);     }     vec.pop_back();     vst[u] = 2;   }   void solve() {     cin >> n >> m;     for (int i = 1; i <= m; i++) {       cin >> u >> v;       adj[u].push_back(v);       adj[v].push_back(u);     }     for (int i = 1; i <= n; i++) {       vst[i] = 0;       lmt[i] = n;     }     for (int i = 1; i <= n; i++) {       if (vst[i]) continue;       dfs(i, -1);     }     lmt[n] = n;     sum[n] = 1;     for (int i = n - 1; i >= 1; i--) {       if (lmt[i + 1] < lmt[i]) lmt[i] = lmt[i + 1];       sum[i] = lmt[i] - i + 1;     }     sum[0] = 0;     for (int i = 1; i <= n; i++) sum[i] += sum[i - 1];     cin >> q;     for (int i = 1, j; i <= q; i++) {       cin >> l >> r;       j = lower_bound(lmt + l, lmt + r + 1, r) - lmt;       c = r + 1 - j;       res = ((c * (c + 1)) / 2) + sum[j - 1] - sum[l - 1];       cout << res <<   n ;     }   }   int main() {     std::ios::sync_with_stdio(0);     cin.tie(0);     solve();     return 0;   }   