#include<bits/stdc++.h>
using namespace std;
int n,a[1000010],b[1000010];
struct SGT{
	struct node{
		int A,B;
	}tr[4000010];
	inline void push_up(int p){
		tr[p].A=max(tr[p<<1].A,tr[p<<1|1].A);
		tr[p].B=max(tr[p<<1].B,tr[p<<1|1].B);
	}
	inline void build(int p,int l,int r){
		if(l>=r){
			tr[p].A=a[l],tr[p].B=b[l];
			return;
		}
		int mid=(l+r)>>1;
		build(p<<1,l,mid),build(p<<1|1,mid+1,r);
		push_up(p);
	}
	inline pair<int,int> query(int p,int l,int r,int L,int R){
		if(l>=L&&r<=R)return {tr[p].A,tr[p].B};
		int mid=(l+r)>>1;
		pair<int,int>res={0,0},t;
		if(L<=mid){
			t=query(p<<1,l,mid,L,R);
			res.first=max(res.first,t.first);
			res.second=max(res.second,t.second);
		}
		if(R>mid){
			t=query(p<<1|1,mid+1,r,L,R);
			res.first=max(res.first,t.first);
			res.second=max(res.second,t.second);
		}
		return res;
	}
}T;
int main(){
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	std::ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int t;cin>>t>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)cin>>b[i];
	T.build(1,1,n);
	int Q;cin>>Q;
	while(Q--){
		int l,r;
		cin>>l>>r;
		unsigned long long res=0;
		for(int i=l;i<=r;i++)
		for(int j=i;j<=r;j++){
			pair<int,int>tmp=T.query(1,1,n,i,j);
			res+=tmp.first*tmp.second;
		}
		cout<<res<<'\n';
	}
	return 0;
}