#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull type,n,a[500200],b[500200],q,pos[500500],block,tree1[1000100],tree2[1000100];
void build(ull now,ull l,ull r)
{
	if(l==r)
	{
		tree1[now]=a[l];
		tree2[now]=b[l];
		return;
	}
	ull mid=(l+r)>>1;
	build(now*2,l,mid);
	build(now*2+1,mid+1,r);
	tree1[now]=max(tree1[now*2],tree1[now*2+1]);
	tree2[now]=max(tree2[now*2],tree2[now*2+1]);
}
ull find1(ull now,ull l,ull r,ull tl,ull tr)
{
	if(l>=tl&&r<=tr)
	{
		return tree1[now];
	}
	ull mid=(l+r)>>1,temp1=0,temp2=0;
	if(tl<=mid)
	{
		temp1=find1(now*2,l,mid,tl,tr);
	}
	if(tr>mid)
	{
		temp2=find1(now*2+1,mid+1,r,tl,tr);
	}
	return max(temp1,temp2);
}
ull find2(ull now,ull l,ull r,ull tl,ull tr)
{
	if(l>=tl&&r<=tr)
	{
		return tree2[now];
	}
	ull mid=(l+r)>>1,temp1=0,temp2=0;
	if(tl<=mid)
	{
		temp1=find2(now*2,l,mid,tl,tr);
	}
	if(tr>mid)
	{
		temp2=find2(now*2+1,mid+1,r,tl,tr);
	}
	return max(temp1,temp2);
}
void muo(ull l,ull r)
{
	ull temp=0;
	build(1,l,r);
	for(ull i=l;i<=r;i++)
	{
		for(ull j=i;j<=r;j++)
		{
			temp+=find1(1,l,r,i,j)*find2(1,l,r,i,j);
		}
	}
	cout<<temp<<endl;
}
int main()
{
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	cin>>type>>n;
	block=sqrt(n);
	for(ull i=1;i<=n;i++)
	{
		pos[i]=i/block+1;
	}
	for(ull i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(ull i=1;i<=n;i++)
	{
		cin>>b[i];
	}
	cin>>q;
	while(q--)
	{
		ull l,r;
		cin>>l>>r;
		muo(l,r);
	}
	return 0;
}