#include<bits/stdc++.h>
using namespace std;
long long t,n,a[250010],b[250010],q,l,r;
long long c[2][1000010],tag[2][1000010];
bool vis[2][1000010];
long long stac[2][250010],top[2],ret,ans;
void pushdown(int l,int r,int mid,int rt,int ver)
{
	if(!vis[ver][rt]) return;
	c[ver][rt<<1]=tag[ver][rt]*(mid-l+1);
	c[ver][rt<<1|1]=tag[ver][rt]*(r-mid);
	tag[ver][rt<<1]=tag[ver][rt];
	vis[ver][rt<<1]=1;
	tag[ver][rt<<1|1]=tag[ver][rt];
	vis[ver][rt<<1|1]=1;
	tag[ver][rt]=0;
	vis[ver][rt]=0;
}
void modify(int l,int r,int L,int R,long long v,int rt,int ver)
{
	if(L<=l&&r<=R)
	{
		c[ver][rt]=(r-l+1)*v;
		tag[ver][rt]=v;
		vis[ver][rt]=1;
		return;
	}
	int mid=(l+r)>>1;
	pushdown(l,r,mid,rt,ver);
	if(mid>=L) modify(l,mid,L,R,v,rt<<1,ver);
	if(mid<R) modify(mid+1,r,L,R,v,rt<<1|1,ver);
	c[ver][rt]=c[ver][rt<<1]+c[ver][rt<<1|1];
}
long long ask(int l,int r,int L,int R,int rt,int ver)
{
	if(L>R) return 0;
	if(L<=l&&r<=R) return c[ver][rt];
	int mid=(l+r)>>1;
	long long ret=0;
	pushdown(l,r,mid,rt,ver);
	if(mid>=L) ret+=ask(l,mid,L,R,rt<<1,ver);
	if(mid<R) ret+=ask(mid+1,r,L,R,rt<<1|1,ver);
	return ret;
}
int main()
{
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	scanf("%lld%lld",&t,&n);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	for(int i=1;i<=n;i++)
		scanf("%lld",&b[i]);
	scanf("%lld",&q);
	for(int i=1;i<=q;i++)
	{
		scanf("%lld%lld",&l,&r);
		top[0]=top[1]=0;
		stac[0][0]=stac[0][1]=l-1;
		ret=ans=0;
		modify(1,n,1,n,0,1,0);
		modify(1,n,1,n,0,1,1);
		for(int j=l;j<=r;j++)
		{
			while(top[0]&&a[j]>a[stac[0][top[0]]])
			{
				ret-=a[stac[0][top[0]]]*ask(1,n,stac[0][top[0]-1]+1,stac[0][top[0]],1,1);
				top[0]--;
			}
			stac[0][++top[0]]=j;
			ret+=a[stac[0][top[0]]]*ask(1,n,stac[0][top[0]-1]+1,j-1,1,1);
			modify(1,n,stac[0][top[0]-1]+1,stac[0][top[0]],a[j],1,0);
			while(top[1]&&b[j]>b[stac[1][top[1]]])
			{
				ret-=b[stac[1][top[1]]]*ask(1,n,stac[1][top[1]-1]+1,stac[1][top[1]],1,0);
				top[1]--;
			}
			stac[1][++top[1]]=j;
			ret+=b[stac[1][top[1]]]*ask(1,n,stac[1][top[1]-1]+1,j-1,1,0);
			modify(1,n,stac[1][top[1]-1]+1,stac[1][top[1]],b[j],1,1);
			ret+=a[j]*b[j];
			ans+=ret;
		}
		printf("%lld\n",ans);
	}
	return 0;
}