#include<bits/stdc++.h>
using namespace std;

const int c=500002;


int ki[c], eldb, si[c], r[c];
int holvan(int a) {
    if (ki[a]) return holvan(ki[a]);
    return a;
}
void unio(int a, int b) {
    a=holvan(a), b=holvan(b);
    if (a!=b) {
        eldb++;
        if (si[a]<si[b]) {
            ki[a]=b, si[b]+=si[a];
            r[eldb]=a;
        } else {
            ki[b]=a, si[a]+=si[b];
            r[eldb]=b;
        }
    }
}
void torol(int ert) {
    while(eldb>ert) {
        int v=r[eldb];
        si[ki[v]]-=si[v], ki[v]=0;
        eldb--;
    }
}
int n, m, q, ans[c], kezd[c], veg[c];
long long pref[c], pref2[c];
// ans[i]: az i, i+1, ... ans[i] eleket kitorolve nincs paratlan kor, ans[i-1]-el mar lenne

bool add(int id) {
    int bcs=kezd[id], jcs=veg[id];
    if (holvan(bcs)!=holvan(jcs)) {
        unio(bcs, jcs);
        return false;
    }
    return true;
}

void solve(int bal, int jobb, int kis, int nagy) {
    // kis<=ans[bal] es ans[jobb]<=nagy;
    // a jobb, jobb+1, .... kis-1 elek mar szerepelnek, nincs paratlan kor
    if (bal>jobb) {
        return;
    }
    //cout << "solve " << bal << " " << jobb << " " << kis << " " << nagy << " " << eldb << "\n";
    if (kis==nagy) {
        for (int i=bal; i<=jobb; i++) {
            ans[i]=kis;
        }
        return;
    }
    if (jobb>kis) {
        int elkezd=eldb;
        int koz=(bal+jobb)/2, res=nagy;
        for (int i=koz; i<nagy; i++) {
            if (add(i)) {
                res=i;
                break;
            }
        }
        ans[koz]=res;
        torol(elkezd);
        for (int i=max(1, koz-1); i<kis; i++) {
            add(i);
        }
        solve(bal, koz-1, kis, res);
        torol(elkezd);


        for (int i=jobb; i<res; i++) {
            add(i);
        }
        solve(koz+1, jobb, res, nagy);
        torol(elkezd);
        return;
    }
    // bal<=jobb<=kis<nagy
    // jobb, jobb+1, ... kis-1 elek szerepelnek

    int elkezd=eldb;
    int koz=(bal+jobb)/2;


    for (int i=jobb-1; i>=koz; i--) {
        add(i);
    }

    int elkozep=eldb;
    int res=nagy;
    for (int i=kis; i<nagy; i++) {
        if (add(i)) {
            res=i;
            break;
        }
    }
    ans[koz]=res;
    torol(elkozep);
    solve(bal, koz-1, kis, res);
    torol(elkezd);

    for (int i=kis; i<res; i++) {
        add(i);
    }
    solve(koz+1, jobb, res, nagy);
    torol(elkezd);
    return;
}


int main()
{
    ios_base::sync_with_stdio(false);
    cin >> n >> m;
    for (int i=1; i<=2*n; i++) {
        si[i]=1;
    }
    for (int i=1; i<=m; i++) {
        cin >> kezd[i] >> veg[i];
    }

    solve(1, m, 1, m+1);

    for (int i=1; i<=m; i++) {
        pref[i]=pref[i-1]+ans[i];
        pref2[i]=pref2[i-1]+i;
    }
    int q;
    cin >> q;
    for (int i=1; i<=q; i++) {
        int l, r;
        cin >> l >> r;
        int lo=l-1, hi=r+1, mid;
        while (hi-lo>1) {
            mid=(hi+lo)/2;
            if (ans[mid]>r) {
                hi=mid;
            } else {
                lo=mid;
            }
        }
        long long dif=r-lo;
        cout << pref[lo]+pref2[l-1]-pref[l-1]-pref2[lo]+dif*(dif+1)/2 << "\n";
    }

	return 0;
}
/*
6 8
1 3
1 5
1 6
2 5
2 6
3 4
3 5
5 6
1
1 3
*/
