#include using namespace std; #define PB push_back #define ZERO (1e-10) #define INF int(1e9+1) #define CL(A,I) (memset(A,I,sizeof(A))) #define DEB printf("DEB!\n"); #define D(X) cout<<" "<<#X": "<B&&A-ZERO pll; typedef vector vi; typedef pair ii; typedef vector vii; #define IN(n) int n;scanf("%d",&n); #define FOR(i, m, n) for (int i(m); i < n; i++) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define FT(m, n) FOR(k, m, n) #define aa first #define bb second void ga(int N,int *A){F(N)scanf("%d",A+i);} struct nd{ typedef nd nt; nd():P(0),pp(0),f(0){*C=C[1]=0;fix();} nt*P,*C[2],*pp; int f; void fix(){ if(*C)C[0]->P=this; if(C[1])C[1]->P=this; } void psh(){ if(!f)return; f=0,swap(*C,C[1]); if(*C)C[0]->f^=1; if(C[1])C[1]->f^=1; } int up(){return !P?-1:!(P->C[0]==this);} void zig(int c){ nt*X=C[c]; if((X->P=P))P->C[up()]=X; C[c]=X->C[1-c],X->C[1-c]=this; fix();X->fix(); if(P)P->fix(); swap(pp,X->pp); } void zA(int c){ nt*X=C[c],*Y=X->C[c]; if((Y->P=P))P->C[up()]=Y; C[c]=X->C[1-c],X->C[c]=Y->C[1-c],Y->C[1-c]=X; X->C[1-c]=this,fix(),X->fix(),Y->fix(); if(P)P->fix(); swap(pp,Y->pp); } void zB(int c){ nt*X=C[c],*Y=X->C[1-c]; if((Y->P=P))P->C[up()]=Y; C[c]= Y->C[1-c],X->C[1-c]=Y->C[c],Y->C[1-c]=this; Y->C[c]=X,fix(),X->fix(),Y->fix(); if(P)P->fix(); swap(pp,Y->pp); } nt*splay(){ for(psh();P;){ if(P->P) P->P->psh(); P->psh(),psh(); int c1=up(),c2=P->up(); if(!~c2) P->zig(c1); else if(c1==c2)P->P->zA(c1); else P->P->zB(c2); } return this; } nt*lst(){return psh(),C[1]?C[1]->lst():splay();} nt*fst(){return psh(),*C?C[0]->fst():splay();} }; struct lc{ typedef nd nt; lc(int N):cd(N){} void lnk(int u, int v){if(con(u,v))return;rt(v),cd[v].pp=&cd[u];} void cut(int u,int v){ if(!con(u,v))return; rt(u),cd[v].splay(); if(cd[v].pp)cd[v].pp=0; else cd[v].C[0]=cd[v].C[0]->P=0,cd[v].fix(); } bool con(int u,int v){ nt*nu=acc(u)->fst(),*nv=acc(v)->fst(); return nu == nv; } void rt(int u){ acc(u),cd[u].splay(); if(*cd[u].C) cd[u].C[0]->P=0,cd[u].C[0]->f^=1,cd[u].C[0]->pp=&cd[u], cd[u].C[0]=0,cd[u].fix(); } nd*acc(int u){ nt*x,*pp; for(x=cd[u].splay();x->pp;x=pp){ pp=x->pp->splay(),x->pp=0; if(pp->C[1])pp->C[1]->P=0,pp->C[1]->pp=pp; pp->C[1]=x,pp->fix(); } return x; } vector cd; }; #define MX (1<<18) #define SM(X,Y) (S[Y]-(X?S[X-1]:0)) #define GS(N) ((N)*(N+1ll)/2) ll S[MX]; int N,M,a,b,A[MX],B[MX],F[MX],I,G[MX]; int main(void){ scanf("%d%d",&N,&M); F(M)scanf("%d%d",A+i,B+i),--A[i],--B[i]; lc L(N); F(M){ while(Ii)--I; G[i]=I+1; } IN(_)F(_){ scanf("%d%d",&a,&b),--a,--b; if(G[b]<=a)printf("%lld\n",GS(b-a+1)); else printf("%lld\n",GS(b-G[b]+1)+SM(a,G[b]-1)); } return 0; }