#include<bits/stdc++.h>
using namespace std;

typedef unsigned long long ull;
constexpr int maxn=250010;

struct node
{
	int l,r,ta,tb,len;
	ull sa,sb,sab;
	void covera(int v)
	{
		ta=v;
		sa=ull(len)*ull(v);
		sab=sb*ull(v);
	}
	void coverb(int v)
	{
		tb=v;
		sb=ull(len)*ull(v);
		sab=sa*ull(v);
	}
}t[maxn*2];

int cnt,a[maxn],b[maxn],stka[maxn],stkb[maxn];

void vBuild(node &rt,int l,int r)
{
	rt.ta=rt.tb=0;
	rt.sa=rt.sb=rt.sab=0;
	rt.len=r-l+1;
	if(l==r) return;
	int mid=(l+r)/2;
	vBuild(t[rt.l=++cnt],l,mid);
	vBuild(t[rt.r=++cnt],mid+1,r);
}

void vPushDown(node &rt)
{
	if(rt.ta)
	{
		t[rt.l].covera(rt.ta);
		t[rt.r].covera(rt.ta);
		rt.ta=0;
	}
	if(rt.tb)
	{
		t[rt.l].coverb(rt.tb);
		t[rt.r].coverb(rt.tb);
		rt.tb=0;
	}
}

void vPushUp(node &rt)
{
	rt.sa=t[rt.l].sa+t[rt.r].sa;
	rt.sb=t[rt.l].sb+t[rt.r].sb;
	rt.sab=t[rt.l].sab+t[rt.r].sab;
}

void vCover(node &rt,int l,int r,int L,int R,int v)
{
	if(l==L&&r==R)
	{
		if(v>0) rt.covera(v);
		else rt.coverb(-v);
		return;
	}
	vPushDown(rt);
	int mid=(l+r)/2;
	if(R<=mid) vCover(t[rt.l],l,mid,L,R,v);
	else if(L>mid) vCover(t[rt.r],mid+1,r,L,R,v);
	else vCover(t[rt.l],l,mid,L,mid,v),vCover(t[rt.r],mid+1,r,mid+1,R,v);
	vPushUp(rt);
}

void vPrint(node &rt,int l,int r)
{
	if(l==r)
	{
		cout<<rt.sa<<' '<<rt.sb<<'\n';
		return;
	}
	vPushDown(rt);
	int mid=(l+r)/2;
	vPrint(t[rt.l],l,mid);
	vPrint(t[rt.r],mid+1,r);
	vPushUp(rt);
}

int main()
{
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	ios::sync_with_stdio(false),cin.tie(0);
	int T,i,n,q,l,r;
	cin>>T>>n;
	for(i=1;i<=n;i++) cin>>a[i];
	for(i=1;i<=n;i++) cin>>b[i];
	cin>>q;
	while(q--)
	{
		ull ans=0;
		int *topa=stka,*topb=stkb;
		cin>>l>>r;
		cnt=1;
		vBuild(t[1],l,r);
		*topa=*topb=l-1;
		for(i=l;i<=r;i++)
		{
			while(topa!=stka&&a[*topa]<a[i]) topa--;
			vCover(t[1],l,r,1+*topa,i,a[i]);
			*++topa=i;
			while(topb!=stkb&&b[*topb]<b[i]) topb--;
			vCover(t[1],l,r,1+*topb,i,-b[i]);
			*++topb=i;
			ans+=t[1].sab;
//			vPrint(t[1],l,r);
//			cout<<'\n';
		}
		cout<<ans<<'\n';
	}
	return 0;
}