#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int arr[maxn];
int block=0;
int tot=0;
int l[maxn];
int r[maxn];
int belong[maxn];
int cpy[maxn];
int arr1[maxn];
int block1=0;
int tot1=0;
int l1[maxn];
int r1[maxn];
int belong1[maxn];
int cpy1[maxn];
void init(int n)
{
block=(int)sqrt(n);
tot=n/block;
if(n%block!=0)tot++;
for(int i=1;i<=tot;i++)
{
l[i]=(i-1)*block+1;
r[i]=i*block;
}
r[tot]=n;
for(int i=1;i<=n;i++)
{
belong[i]=(i-1)/block+1;
}
for(int i=1;i<=tot;i++)
{
sort(cpy+l[i],cpy+r[i]+1);
}
block1=(int)sqrt(n);
tot1=n/block;
if(n%block1!=0)tot1++;
for(int i=1;i<=tot1;i++)
{
l[i]=(i-1)*block1+1;
r[i]=i*block1;
}
r[tot1]=n;
for(int i=1;i<=n;i++)
{
belong1[i]=(i-1)/block1+1;
}
for(int i=1;i<=tot1;i++)
{
sort(cpy1+l1[i],cpy1+r1[i]+1);
}
}
unsigned long long query(int x,int y)
{
if(belong[x]==belong[y])
{
int maxx=0;
int maxx1=0;
for(int i=x;i<=y;i++)
{
if(arr[i]>maxx)maxx=arr[i];
}
for(int i=x;i<=y;i++)
{
if(arr1[i]>maxx1)maxx1=arr1[i];
}
return maxx*maxx1;
}
int maxx=0;
int maxx1=0;
for(int i=x;i<=r[belong[x]];i++)
{
if(arr[i]>maxx)maxx=arr[i];
}
for(int i=l[belong[y]];i<=y;i++)
{
if(arr[i]>maxx)maxx=arr[i];
}
for(int i=belong[x]+1;i<=belong[y]-1;i++)
{
int ll=l[i],rr=r[i],mid=0;
while(ll<=rr)
{
mid=(ll+rr)/2;
if(cpy[mid]>=maxx)
{
rr=mid-1;
}
else
{
ll=mid+1;
}
}
}
for(int i=x;i<=r1[belong1[x]];i++)
{
if(arr1[i]>maxx1)maxx1=arr1[i];
}
for(int i=l1[belong1[y]];i<=y;i++)
{
if(arr1[i]>maxx1)maxx1=arr1[i];
}
for(int i=belong1[x]+1;i<=belong1[y]-1;i++)
{
int ll=l1[i],rr=r1[i],mid=0;
while(ll<=rr)
{
mid=(ll+rr)/2;
if(cpy1[mid]>=maxx1)
{
rr=mid-1;
}
else
{
ll=mid+1;
}
}
}
return maxx*maxx1;
}
int main()
{
int t=0,n=0,q=0;
cin>>t>>n;
for(int i=1;i<=n;i++)
{
cin>>arr[i];
}
memcpy(cpy,arr,sizeof(arr));
for(int i=1;i<=n;i++)
{
cin>>arr1[i];
}
memcpy(cpy1,arr1,sizeof(arr1));
init(n);
cin>>q;
int ll=0,rr=0;
unsigned long long ans=0;
for(int i=1;i<=q;i++)
{
cin>>ll>>rr;
for(int j=ll;j<=rr;j++)
{
for(int k=j;k<=rr;k++)
{
ans+=query(i,j);
}
}
}
cout<<ans;
return 0;
}