#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5+10;
int t,n,a[N],b[N],ma,mb,q;
unsigned long long ans;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
struct node
{
	int l,r,w;
}tr1[N*4],tr2[N*4];
void up(int k)
{
	tr1[k].w=max(tr1[k*2].w,tr1[k*2+1].w);
	tr2[k].w=max(tr2[k*2].w,tr2[k*2+1].w);
}
void bd(int k,int ll,int rr)
{
	tr1[k].l=tr2[k].l=ll,tr1[k].r=tr2[k].r=rr;
	if(ll==rr)
	{
		tr1[k].w=a[ll];
		tr2[k].w=b[ll];
		return ;
	}
	int mid=(ll+rr)/2;
	bd(k*2,ll,mid);
	bd(k*2+1,mid+1,rr);
	up(k);
}
void ask(int k,int x,int y)
{
	int ll=tr1[k].l,rr=tr1[k].r;
	if(ll>=x&&rr<=y)
	{
		ma=max(tr1[k].w,ma);
		mb=max(tr2[k].w,mb);
		return ;
	}
	int mid=(ll+rr)/2;
	if(x<=mid)
		ask(k*2,x,y);
	if(y>mid)
		ask(k*2+1,x,y);
}
signed main()
{
	freopen("match.in","r",stdin);
	freopen("match.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();
	}
	bd(1,1,n);
	q=read();
	for(int i=1,l,r;i<=q;i++)
	{
		ans=0;
		l=read(),r=read();
		for(int j=l;j<=r;j++)
		{
			for(int k=j;k<=r;k++)
			{
				ma=0,mb=0;
				ask(1,j,k);
				ans+=ma*mb;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}
/*
0 2 
2 1
1 2
1 
1 2
*/
