#include <bits/stdc++.h>
using namespace std;
const int dim=1e5+5;
const int mod=666013;
int n,k,m,a[dim],p=1,lpoz[dim],aint[4*dim],sol[dim];
struct el{
int st,dr,idx;
}q[dim];
bool cmp(el A, el B){
return A.dr<B.dr;
}
void Update(int nod, int st, int dr, int poz, int val){
if(st==dr){
aint[nod]=val;
}
else{
int mid=(st+dr)/2;
if(poz<=mid){
Update(2*nod,st,mid,poz,val);
}
if(poz>mid){
Update(2*nod+1,mid+1,dr,poz,val);
}
aint[nod]=aint[2*nod]%mod+aint[2*nod+1]%mod;
aint[nod]%=mod;
}
}
int Query(int nod, int st, int dr, int x, int y){
if(x==st and y==dr){
return aint[nod]%mod;
}
else{
int mid=(st+dr)/2;
if(y<=mid){
return Query(2*nod,st,mid,x,y)%mod;
}
else
if(x>mid){
return Query(2*nod+1,mid+1,dr,x,y)%mod;
}
else{
return (Query(2*nod,st,mid,x,mid)%mod+Query(2*nod+1,mid+1,dr,mid+1,y)%mod)%mod;
}
}
}
int main(){
ifstream f("distincte.in");
ofstream g("distincte.out");
f>>n>>k>>m;
for(int i=1;i<=n;i++){
f>>a[i];
}
for(int i=1;i<=m;i++){
f>>q[i].st>>q[i].dr;
q[i].idx=i;
}
sort(q+1,q+m+1,cmp);
for(int i=1;i<=m;i++){
while(p<=q[i].dr){
Update(1,1,n,p,a[p]);
if(lpoz[a[p]]){
Update(1,1,n,lpoz[a[p]],0);
}
lpoz[a[p]]=p;
p++;
}
sol[q[i].idx]=Query(1,1,n,q[i].st,q[i].dr)%mod;
}
for(int i=1;i<=m;i++){
g<<sol[i]<<'\n';
}
return 0;
}