func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3e5 + 7;   vector<int> G[N];   int vis[N] = {0}, p[N];   long long sum[N] = {0};   stack<int> s;   void dfs(int u, int fa) {     s.push(u);     vis[u] = 1;     for (int i = 0; i < (int)G[u].size(); i++) {       int v = G[u][i];       if (v == fa) continue;       if (!vis[v])         dfs(v, u);       else if (vis[v] == 1) {         int maxx = u, minn = u;         while (!s.empty()) {           int t = s.top();           s.pop();           maxx = max(t, maxx);           minn = min(t, minn);           if (t == v) break;         }         p[minn] = maxx;       }     }     if (!s.empty() && s.top() == u) s.pop();     vis[u] = 2;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     int n, m;     cin >> n >> m;     for (int i = 0; i < m; i++) {       int x, y;       cin >> x >> y;       G[x].push_back(y);       G[y].push_back(x);     }     for (int i = 1; i <= n + 1; i++) p[i] = n + 1;     for (int i = 1; i <= n; i++)       if (!vis[i]) dfs(i, -1);     for (int i = n; i >= 1; i--) {       p[i] = min(p[i], p[i + 1]);       sum[i] = sum[i + 1] + p[i] - i;     }     int q;     cin >> q;     while (q--) {       int l, r;       cin >> l >> r;       int L = l, R = r + 1;       while (L < R) {         int m = (L + R) / 2;         if (p[m] > r)           R = m;         else           L = m + 1;       }       cout << sum[l] - sum[L] + 1ll * (r - L + 1) * (r - L + 2) / 2 << endl;     }     return 0;   }   