#include<bits/stdc++.h>
using namespace std;
int T,n;
const int N = 2e5 + 5e4 + 10;
int f1[N],f2[N];
struct node{
	int l,r;
	int maxn = -1;
};
typedef long long ll;
//ll mul(ll a,ll b){
//	if(a == 0) return 0;
//	ll t = 0;
//	while(b){
//		if(b & 1){
//			t = (t + a) % mod;
//		}
//		a = (a << 1) % mod;
//		b >>= 1;
//	}
//	return t;
//}
node t1[N << 2],t2[N << 2];
void build1(int l,int r,int root){
	if(l == r){
		t1[root].maxn = f1[l];
		t1[root].l = l;
		t1[root].r = r;
		return;
	}
	int mid = (l + r) >> 1;
	t1[root].l = l;
	t1[root].r = r;
	build1(l,mid,root << 1);
	build1(mid + 1,r,root << 1 | 1);
	t1[root].maxn = max(t1[root << 1].maxn,t1[root << 1 | 1].maxn);
	return;
}
void build2(int l,int r,int root){
	if(l == r){
		t2[root].maxn = f2[l];
		t2[root].l = l;
		t2[root].r = r;
		return;
	}
	int mid = (l + r) >> 1;
	t2[root].l = l;
	t2[root].r = r;
	build2(l,mid,root << 1);
	build2(mid + 1,r,root << 1 | 1);
	t2[root].maxn = max(t2[root << 1].maxn,t2[root << 1 | 1].maxn);
	return;
}
int mmax1(int l,int r,int rt){
	if(t1[rt].l > r || t1[rt].r < l) return -1;
	if(t1[rt].l >= l && t1[rt].r <= r){
		return t1[rt].maxn;
	}
	return max(mmax1(l,r,rt << 1),mmax1(l,r,rt << 1 | 1));
}
int mmax2(int l,int r,int rt){
	if(t2[rt].l > r || t2[rt].r < l) return -1;
	if(t2[rt].l >= l && t2[rt].r <= r){
		return t2[rt].maxn;
	}
	return max(mmax2(l,r,rt << 1),mmax2(l,r,rt << 1 | 1));
}
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("%d",&f1[i]);
	}
	for(int i = 1;i <= n;i++){
		scanf("%d",&f2[i]);
	}
	build1(1,n,1);
	build2(1,n,1);
	
	int qq;
	scanf("%d",&qq);
	for(int ii = 1;ii <= qq;ii++){
		int li,ri;
		scanf("%d%d",&li,&ri);
		ll ans = 0;
		for(int i = li;i <= ri;i++){
			for(int j = i;j <= ri;j++){
				ll k = mmax1(i,j,1) * mmax2(i,j,1);
//				if(ans + k < ans){
//					ans -= 9223372036854775808;
//					ans += k;
//					ans -= 9223372036854775808;
//				}
				ans += k;
			}
		}
		printf("%lld\n",ans);
	}
	
//int l,r;
//	cin >> l >> r;
//	cout << mmax1(l,r,1) << " " << mmax2(l,r,1) << endl;
////	cout << t1[3].maxn;
	return 0;
}
