#include<bits/stdc++.h>
using namespace std;
unsigned long long ans;
int n;
map<pair<int,int>,long long> Map;
int a[2][250010];
int tr[2][4*250010];
void pushup(int rt,int num)
{
	tr[num][rt]=max(tr[num][rt<<1],tr[num][rt<<1|1]);
}
void build(int l,int r,int rt,int num)
{
	if(l==r)
	{
		tr[num][rt]=a[num][l];
		return;
	}
	int m=(l+r)>>1;
	build(l,m,rt<<1,num);
	build(m+1,r,rt<<1|1,num);
	pushup(rt,num);
}
int query(int L,int R,int l,int r,int rt,int num)
{
	if(L<=l&&r<=R)
		return tr[num][rt];
	int m=(l+r)>>1,ANS=0;
	if(L<=m) ANS=max(ANS,query(L,R,l,m,rt<<1,num));
	if(m+1<=R) ANS=max(ANS,query(L,R,m+1,r,rt<<1|1,num));
	return ANS;
}
int main()
{
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	int T,Q,L,R;
	scanf("%d%d",&T,&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[0][i]);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[1][i]);
	}
	build(1,n,1,0);
	build(1,n,1,1);
	scanf("%d",&Q);
	if(n<=3000)
	{
		for(int l=1;l<=n;l++)
		{
			for(int r=l;r<=n;r++)
			{
				Map[make_pair(l,r)]=query(l,r,1,n,1,0)*query(l,r,1,n,1,1);
			}
		}
		for(int i=1;i<=Q;i++)
		{
			ans=0;
			scanf("%d%d",&L,&R);
			for(int l=L;l<=R;l++)
			{
				for(int r=l;r<=R;r++)
				{
					ans+=Map[make_pair(l,r)];
				}
			}
			printf("%lld\n",ans);
		}
	}
	else
	{
		for(int i=1;i<=Q;i++)
		{
			ans=0;
			scanf("%d%d",&L,&R);
			for(int l=L;l<=R;l++)
			{
				for(int r=l;r<=R;r++)
				{
					ans+=query(l,r,1,n,1,0)*query(l,r,1,n,1,1);
				}
			}
			printf("%lld\n",ans);
		}
	}
	return 0;
}
