#include<bits/stdc++.h>
#ifdef xay5421
#define D(...) fprintf(stderr,__VA_ARGS__)
#else
#define D(...) ((void)0)
#endif
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
#define each(x,v) for(auto&x:v)
#define SZ(x) ((int)(x).size())
#define pb push_back
#define eb emplace_back
using namespace std;
using LL=long long;
using ULL=unsigned long long;
template<class T>void rd(T&x){
	int f=0,c;
	while(!isdigit(c=getchar()))f^=!(c^45);
	x=(c&15);
	while(isdigit(c=getchar()))x=x*10+(c&15);
	if(f)x=-x;
}
const int N=250005;
int T,n,Q,ql[N];
ULL a[N],b[N],ans[N];
vector<int>vec[N];
int now_t;
struct segtree{
	int len[N*4];
	ULL sa[N*4],sb[N*4],sab[N*4],ss[N*4],tga[N*4],tgb[N*4],tgsa[N*4],tgsb[N*4],tgss[N*4]; // ret=sab*now_t+ss
	ULL get_val(int k1){return sab[k1]*now_t+ss[k1];}
	void upd(int k1){
		sa[k1]=sa[k1*2]+sa[k1*2+1];
		sb[k1]=sb[k1*2]+sb[k1*2+1];
		sab[k1]=sab[k1*2]+sab[k1*2+1];
		ss[k1]=get_val(k1*2)+get_val(k1*2+1)-sab[k1]*now_t;
	}
	void bud(int k1,int k2,int k3){
		len[k1]=k3-k2+1;
		if(k2==k3){
			return;
		}
		int mid=(k2+k3)>>1;
		bud(k1*2,k2,mid),bud(k1*2+1,mid+1,k3);
	}
	void pst_a(int k1,ULL k2){
		tga[k1]+=k2;
		sa[k1]+=len[k1]*k2;
		sab[k1]+=sb[k1]*k2;
	}
	void pst_b(int k1,ULL k2){
		tgb[k1]+=k2;
		sb[k1]+=len[k1]*k2;
		sab[k1]+=sa[k1]*k2;
	}
	void pst_sa(int k1,ULL k2){
		tgsa[k1]+=k2;
		ss[k1]+=sa[k1]*k2;
	}
	void pst_sb(int k1,ULL k2){
		tgsb[k1]+=k2;
		ss[k1]+=sb[k1]*k2;
	}
	void pst_ss(int k1,ULL k2){
		tgss[k1]+=k2;
		ss[k1]+=k2*len[k1];
	}
	void psd(int k1){
		if(tgsa[k1]){
			pst_sa(k1*2,tgsa[k1]);
			pst_sa(k1*2+1,tgsa[k1]);
			tgsa[k1]=0;
		}
		if(tgsb[k1]){
			pst_sb(k1*2,tgsb[k1]);
			pst_sb(k1*2+1,tgsb[k1]);
			tgsb[k1]=0;
		}
		if(tgss[k1]){
			pst_ss(k1*2,tgss[k1]);
			pst_ss(k1*2+1,tgss[k1]);
			tgss[k1]=0;
		}
		if(tga[k1]){
			pst_a(k1*2,tga[k1]);
			pst_a(k1*2+1,tga[k1]);
			tga[k1]=0;
		}
		if(tgb[k1]){
			pst_b(k1*2,tgb[k1]);
			pst_b(k1*2+1,tgb[k1]);
			tgb[k1]=0;
		}
	}
	void add_a(int k1,int k2,int k3,int k4,int k5,ULL k6){
		if(k1==1){
			D("add_a %d %d %llu\n",k4,k5,k6);
		}
		if(k2>k5||k3<k4)return;
		if(k4<=k2&&k3<=k5){
			pst_sb(k1,-k6*now_t);
			// pst_ss(k1,k6*tgb[k1]*now_t);
			pst_a(k1,k6);
			return;
		}
		psd(k1);
		int mid=(k2+k3)>>1;
		add_a(k1*2,k2,mid,k4,k5,k6),add_a(k1*2+1,mid+1,k3,k4,k5,k6);
		upd(k1);
	}
	void add_b(int k1,int k2,int k3,int k4,int k5,ULL k6){
		if(k1==1){
			D("add_b %d %d %llu\n",k4,k5,k6);
		}
		if(k2>k5||k3<k4)return;
		if(k4<=k2&&k3<=k5){
			pst_sa(k1,-k6*now_t);
			// pst_ss(k1,k6*tga[k1]*now_t);
			pst_b(k1,k6);
			return;
		}
		psd(k1);
		int mid=(k2+k3)>>1;
		add_b(k1*2,k2,mid,k4,k5,k6),add_b(k1*2+1,mid+1,k3,k4,k5,k6);
		upd(k1);
	}
	ULL ask(int k1,int k2,int k3,int k4,int k5){
		if(k2>k5||k3<k4)return 0;
		if(k4<=k2&&k3<=k5)return get_val(k1);
		psd(k1);
		int mid=(k2+k3)>>1;
		return ask(k1*2,k2,mid,k4,k5)+ask(k1*2+1,mid+1,k3,k4,k5);
	}
	void down(int k1,int k2,int k3){
		if(k2==k3)return;
		psd(k1);
		int mid=(k2+k3)>>1;
		down(k1*2,k2,mid),down(k1*2+1,mid+1,k3);
		upd(k1);
	}
}sgt;
int main(){
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	rd(T),rd(n);
	rep(i,1,n)rd(a[i]);
	rep(i,1,n)rd(b[i]);
	rd(Q);
	rep(i,1,Q){
		int l,r;
		rd(l),rd(r);
		ql[i]=l;
		vec[r].pb(i);
	}
	sgt.bud(1,1,n);
	vector<int>st1={0},st2={0};
	rep(i,1,n){
		while(SZ(st1)>1&&a[i]>a[st1.back()]){
			int r=st1.back();
			st1.pop_back();
			int l=st1.back();
			sgt.add_a(1,1,n,l+1,r,-a[r]);
		}
		while(SZ(st2)>1&&b[i]>b[st2.back()]){
			int r=st2.back();
			st2.pop_back();
			int l=st2.back();
			sgt.add_b(1,1,n,l+1,r,-b[r]);
		}
		{
			sgt.add_a(1,1,n,st1.back()+1,i,a[i]);
			st1.pb(i);
		}
		{
			sgt.add_b(1,1,n,st2.back()+1,i,b[i]);
			st2.pb(i);
		}
		sgt.down(1,1,n);
		++now_t;
		D("%llu %llu\n",sgt.sab[1],sgt.get_val(1));
		each(x,vec[i]){
			ans[x]=sgt.ask(1,1,n,ql[x],i);
		}
	}
	rep(i,1,Q)printf("%llu\n",ans[i]);
	return 0;
}
