1 #include <cstdio>
2 #include <iostream>
3 #include <cstring>
4 #define N 600010
5 using namespace std;
6 struct edge{int to,from;}e[N];
7 int n,m,cnt,Q,fa[N],dep[N],k[N],head[N];
8 bool vis[N];
9 long long sum[N];
10 void insert(int x,int y) { e[++cnt].to=y; e[cnt].from=head[x]; head[x]=cnt; }
11 void dfs(int x)
12 {
13 vis[x]=1;
14 for (int i=head[x];i;i=e[i].from)
15 if (e[i].to!=fa[x])
16 {
17 if (vis[e[i].to])
18 {
19 if (dep[e[i].to]>dep[x]) continue;
20 int mx=max(x,e[i].to),mn=min(x,e[i].to);
21 for (int j=x;j!=e[i].to;j=fa[j]) mx=max(mx,j),mn=min(mn,j);
22 k[mx]=mn;
23 continue;
24 }
25 dep[e[i].to]=dep[x]+1,fa[e[i].to]=x,dfs(e[i].to);
26 }
27 }
28 int main()
29 {
30 scanf("%d%d",&n,&m);
31 for (int i=1,x,y;i<=m;i++) scanf("%d%d",&x,&y),insert(x,y),insert(y,x);
32 dfs(1);
33 for (int i=1;i<=n;i++) k[i]=max(k[i-1],k[i]),sum[i]=sum[i-1]+(i-k[i]);
34 scanf("%d",&Q);
35 while (Q--)
36 {
37 int x,y;
38 scanf("%d%d",&x,&y);
39 long long l=y+1;
40 for (int j=1<<18;j;j>>=1) if (l-j>0&&k[l-j]>=x) l-=j;
41 printf("%lld\n",(sum[y]-sum[l-1]+(long long)(l-x)*(l-x+1)/2));
42 }
43 }