#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
using namespace std;
int T,n,q;
ull a[300005],b[300005],ans;
struct node{
	int l,r;
	ull v;
}ta[1000005],tb[1000005];
void build(int p,int l,int r){
	if(l==r){
		ta[p].l=l;ta[p].r=r;ta[p].v=a[l];
		tb[p].l=l;tb[p].r=r;tb[p].v=b[l];
		return;
	}
	ta[p].l=l;ta[p].r=r;
	tb[p].l=l;tb[p].r=r;
	int mid=(l+r)/2;
	build(p*2,l,mid);
	build(p*2+1,mid+1,r);
	ta[p].v=max(ta[2*p].v,ta[2*p+1].v);
	tb[p].v=max(tb[2*p].v,tb[2*p+1].v);
}
ull aska(int p,int l,int r){
	if(l==ta[p].l&&r==ta[p].r){
		return ta[p].v;
	}
	int mid=(ta[p].l+ta[p].r)/2;
	if(r<=mid) return aska(2*p,l,r);
	else if(l>mid) return aska(2*p+1,l,r);
	else{
		ull zd=aska(2*p,l,mid);
		ull yd=aska(2*p+1,mid+1,r);
		return max(zd,yd);
	}
}
ull askb(int p,int l,int r){
	if(l==tb[p].l&&r==tb[p].r){
		return tb[p].v;
	}
	int mid=(tb[p].l+tb[p].r)/2;
	if(r<=mid) return askb(2*p,l,r);
	else if(l>mid) return askb(2*p+1,l,r);
	else{
		ull zd=askb(2*p,l,mid);
		ull yd=askb(2*p+1,mid+1,r);
		return max(zd,yd);
	}
}
int main(){
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	scanf("%d%d",&T,&n);
	for(int i=1;i<=n;i++)scanf("%llu",&a[i]);
	for(int i=1;i<=n;i++)scanf("%llu",&b[i]);
	build(1,1,n);
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		ans=0LL;
		int l,r;
		scanf("%d%d",&l,&r);
		for(int p=l;p<=r;p++){
			for(int q=p;q<=r;q++){
				ull x,y;
				x=aska(1,p,q); y=askb(1,p,q);
				ans+=x*y;
			}
		}
		printf("%llu\n",ans);
	}
	return 0;
}
