#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
using namespace std;
const int N=2.5e5+5;

struct segment_tree {
	#define ls (w*2)
	#define rs (w*2+1)
	#define mid ((l+r)/2)
	ull t[N*4];
	int tag[N*4];
	void update(int w,int x,int l,int r) {
		t[w]+=1llu*x*(r-l+1);
		tag[w]=x;
	}
	void push_down(int w,int l,int r) {
		if (!tag[w]) {
			return;
		}
		update(ls,tag[w],l,mid);
		update(rs,tag[w],mid+1,r);
		tag[w]=0;
	}
	void add(int w,int l,int r,int ql,int qr,int x) {
		cerr<<w<<' '<<l<<' '<<r<<' '<<ql<<' '<<qr<<' '<<x<<endl;
		if (ql<=l&&r<=qr) {
			update(w,x,l,r);
			return;
		}
		push_down(w,l,r);
		if (ql<=mid) {
			add(ls,l,mid,ql,qr,x);
		}
		if (qr>mid) {
			add(rs,mid+1,r,ql,qr,x);
		}
		t[w]=t[ls]+t[rs];
	}
	ull query(int w,int l,int r,int ql,int qr) {
		cerr<<w<<' '<<l<<' '<<r<<' '<<ql<<' '<<qr<<endl;
		if (ql<=l&&r<=qr) {
			return t[w];
		}
		push_down(w,l,r);
		if (qr<=mid) {
			return query(ls,l,mid,ql,qr);
		}
		if (ql>mid) {
			return query(rs,mid+1,r,ql,qr);
		}
		return query(ls,l,mid,ql,qr)+query(rs,mid+1,r,ql,qr);
	}
	void clear(int n) {
		memset(t,0,sizeof(ull)*(n+3)*4);
		memset(tag,0,sizeof(int)*(n+3)*4);
	}
	#undef mid
	#undef rs
	#undef ls
}t1,t2;
int T,n,a[N],b[N],st1[N],st2[N];
ull pre[N];
int query(int *a,int *b,int n) {
	ull ans=0;
	int top1=0,top2=0;
	t1.clear(n),t2.clear(n);
	ull now=0;
	for (int i=1;i<=n;i++) {
		while (top1&&a[st1[top1]]<a[i]) {
			int d=a[i]-a[st1[top1]];
			assert(st1[top1-1]+1<=st1[top1]);
			t1.add(1,1,n,st1[top1-1]+1,st1[top1],d);
			now+=1llu*d*t2.query(1,1,n,st1[top1-1]+1,st1[top1]);
			top1--;
		}
		t1.add(1,1,n,i,i,a[i]);
		st1[++top1]=i;
		
		while (top2&&b[st2[top2]]<b[i]) {
			int d=b[i]-b[st2[top2]];
			assert(st2[top2-1]+1<=st2[top2]);
			t2.add(1,1,n,st2[top2-1]+1,st2[top2],d);
			now+=1llu*d*t1.query(1,1,n,st2[top2-1]+1,st2[top2]);
			top2--;
		}
		t2.add(1,1,n,i,i,b[i]);
		
		ans+=now+=1llu*a[i]*b[i];
		cerr<<now<<endl;
	}
	return ans;
}

signed main() {
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	
	ios::sync_with_stdio(false),cin.tie(0);
	cout.precision(10),cout.setf(ios::fixed);
	
	cin>>T>>n;
	for (int i=1;i<=n;i++) {
		cin>>a[i];
	}
	for (int i=1;i<=n;i++) {
		cin>>b[i];
	}
	int Q;
	cin>>Q;
	while (Q--) {
		int l,r;
		cin>>l>>r;
		cout<<query(a+l-1,b+l-1,r-l+1)<<"\n";
	}
	
	return 0;
}
