#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
int read()
{
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
const int MAXN=3e5+10;
int n,T;
int a[MAXN],b[MAXN],out[MAXN];
int d[MAXN],tail;
int g[MAXN],cnt;
vector<pair<int,int> >p[MAXN];
struct node
{
	ull len;
	ull a,b,ab;
	ull taga,tagb;
	void add(ull x,ull y)
	{
		a+=x*len;
		taga+=x;
		ab+=b*x;
		b+=y*len;
		tagb+=x;
		ab+=a*y;
		return ;
	}
}shu[MAXN*4];
void pushdown(int now)
{
	shu[now*2].add(shu[now].taga,shu[now].tagb);
	shu[now*2+1].add(shu[now].taga,shu[now].tagb);
	shu[now].taga=shu[now].tagb=0;
	return ;
}
void update(int now)
{
	shu[now].a=shu[now*2].a+shu[now*2+1].a;
	shu[now].b=shu[now*2].b+shu[now*2+1].b;
	shu[now].ab=shu[now*2].ab+shu[now*2+1].ab;
}
void build(int now,int l,int r)
{
	shu[now].len=r-l+1;
	if(l==r)return ;
	int mid=(l+r)>>1;
	build(now*2,l,mid);build(now*2+1,mid+1,r);
	return ;
}
void add(int now,int l,int r,int x,int y,int t1,int t2)
{
	if(l>=x&&r<=y)
	{
		shu[now].add(t1,t2);
		return ;
	}
	pushdown(now);
	int mid=(l+r)>>1;
	if(x<=mid)add(now*2,l,mid,x,y,t1,t2);
	if(mid<y)add(now*2+1,mid+1,r,x,y,t1,t2);
	update(now);
	return ;
}
ull query(int now,int l,int r,int x,int y)
{
	if(l>=x&&r<=y)return shu[now].ab;
	pushdown(now);
	int mid=(l+r)>>1;
	ull sum=0;
	if(x<=mid)sum+=query(now*2,l,mid,x,y);
	if(mid<y)sum+=query(now*2+1,mid+1,r,x,y);
	return sum;
}
void solve()
{
	build(1,1,n);
	for(int i=1;i<=n;i++)
	{
		while(tail>0&&a[i]>a[d[tail]])
		{
			add(1,1,n,d[tail-1]+1,d[tail],a[i]-a[d[tail]],0);
			tail--;
		}
		d[++tail]=i;
		while(cnt>0&&b[i]>b[g[cnt]])
		{
			add(1,1,n,g[cnt-1]+1,g[cnt],0,b[i]-b[g[cnt]]);
			cnt--;
		}
		g[++cnt]=i;
		add(1,1,n,i,i,a[i],b[i]);
		for(int j=0;j<p[i].size();j++)out[p[i][j].second]+=query(1,1,n,p[i][j].first,i);
	//	printf("%lld\n",query(1,1,n,1,i));
	}
}
ull baoli(int l,int r)
{
	ull sum=0;
	for(int i=l;i<=r;i++)
	{
		int p1=0,p2=0;
		for(int j=i;j<=r;j++)
		{
			p1=max(p1,a[j]);
			p2=max(p2,b[j]);
			sum+=p1*p2;
		}
	}
	return sum;
}
int main()
{
	freopen("match.in","r",stdin);freopen("baoli.out","w",stdout);
	T=read();n=read();
	for(int i=1;i<=n;i++)a[i]=read();
	for(int i=1;i<=n;i++)b[i]=read();
	int q=read();
	for(int i=1;i<=q;i++)
	{
		int l,r;
		l=read();r=read();
		printf("%llu\n",baoli(l,r));
	}
	return 0;
}
