#include<bits/stdc++.h>
using namespace std;
constexpr int N=250000;
typedef unsigned long long ull;
int n,a[N+10],b[N+10];
struct _{
	int x,val;
};
deque<_> q1,q2;
ull s;
struct BIT{
	ull s[N+10];
	void update(int x,ull c){
		while(x<=n){
			s[x]+=c;
			x+=x&-x;
		}
	}
	ull query(int x){
		ull rv=0;
		while(x){
			rv+=s[x];
			x-=x&-x;
		}
		return rv;
	}
	void clear(){
		memset(s,0,n+1<<3);
	}
}s1,t1,s2,t2;
ull query1(int x){
	return (x+1)*s1.query(x)-t1.query(x);
}
ull query2(int x){
	return (x+1)*s2.query(x)-t2.query(x);
}
void update1(int L,int R,ull c){
	ull tmp=query2(R)-query2(L-1);
	s+=tmp*c;
	s1.update(L,c);
	s1.update(R+1,-c);
	t1.update(L,c*L);
	t1.update(R+1,-c*(R+1));
}
void update2(int L,int R,ull c){
	ull tmp=query1(R)-query1(L-1);
	s+=tmp*c;
	s2.update(L,c);
	s2.update(R+1,-c);
	t2.update(L,c*L);
	t2.update(R+1,-c*(R+1));
}
int main(){
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	int T;
	cin>>T>>n;
	int i;
	for(i=1;i<=n;++i) cin>>a[i];
	for(i=1;i<=n;++i) cin>>b[i];
	int q;
	cin>>q;
	for(i=1;i<=q;++i){
		int l,r;
		cin>>l>>r;
		q1.clear(),q2.clear();
		q1.push_back({l-1,n+1});
		q2.push_back({l-1,n+1});
		ull sum=0;
		int j;
		s=0;
		for(j=l;j<=r;++j){
			_ tmp;
			while(q1.back().val<a[j]){
				tmp=q1.back();
				q1.pop_back();
				update1(q1.back().x+1,tmp.x,-tmp.val);
			}
			update1(q1.back().x+1,j,a[j]);
			q1.push_back({j,a[j]});
			while(q2.back().val<b[j]){
				tmp=q2.back();
				q2.pop_back();
				update2(q2.back().x+1,tmp.x,-tmp.val);
			}
			update2(q2.back().x+1,j,b[j]);
			q2.push_back({j,b[j]});
			sum+=s;
		}
		s1.clear();
		t1.clear();
		s2.clear();
		t2.clear();
		cout<<sum<<'\n';
	}
	return 0;
}
