# Help needed in Mo's Algorithm

Recently I learned Mo’s Algorithm and now I’m trying to solve these two questions from atcoder and spoj but my code gives TLE, can anyone help me in the optimisation of the code.

``````from sys  import stdin,stdout
from collections  import *
from math import *
pr=lambda n: stdout.write(str(n)+"\n")

mod=1000000007
INF=float('inf')
d={}

length=0

global length
if x not in d:
length+=1
d[x]=1
else:
d[x]+=1

def REMOVE(x):
global length
if d[x]==1:
length-=1
d.pop(x)
else:
d[x]-=1

def solve():
n,q=mp()
l=li()
query=[li()+[i] for i in range(q)]
P=int(n**0.5)
query.sort(key=lambda x:(x[0]//P,x[1]))
curL,curR=0,-1
ans=[0 for i in range(q)]
for Q in query:
left,right,ind=Q
left-=1
right-=1

while curL>left:
curL-=1

while curR<right:
curR+=1

while curL<left:
REMOVE(l[curL])
curL+=1

while curR>right:
REMOVE(l[curR])
curR-=1

ans[ind]=length

print('\n'.join(map(str,ans)))

for _ in range(1):
solve()
``````

Thanks in advance @ssrivastava990 , @aneee004 , @galencolin , @first_semester , @spaanse