N=int(input()) block_size=1000 block_covered=[0]*1001 block_zerocount=[0]*1001 block_detail=[[0]*block_size for i in range(1001)] def calc_block(i): return i//block_size, i%block_size for i in range(N): block_zerocount[calc_block(i)[0]]+=1 Query_memo={} Q=int(input()) for i in range(1,Q+1): q=list(map(int,input().split())) if q[0]==1: L=q[1]-1 R=q[2]-1 lb, li=calc_block(L) rb, ri=calc_block(R) Query_memo[i]=(L,R) if lb==rb: for j in range(li,ri): block_detail[lb][j]+=1 if block_detail[lb][j]==1: block_zerocount[lb]-=1 else: for j in range(li,block_size): block_detail[lb][j]+=1 if block_detail[lb][j]==1: block_zerocount[lb]-=1 for j in range(ri): block_detail[rb][j]+=1 if block_detail[rb][j]==1: block_zerocount[rb]-=1 for b in range(lb+1, rb): block_covered[b]+=1 elif q[0]==2: L,R=Query_memo[q[1]] lb, li=calc_block(L) rb, ri=calc_block(R) if lb==rb: for j in range(li,ri): block_detail[lb][j]-=1 if block_detail[lb][j]==0: block_zerocount[lb]+=1 else: for j in range(li,block_size): block_detail[lb][j]-=1 if block_detail[lb][j]==0: block_zerocount[lb]+=1 for j in range(ri): block_detail[rb][j]-=1 if block_detail[rb][j]==0: block_zerocount[rb]+=1 for b in range(lb+1, rb): block_covered[b]-=1 else: ans=0 for j in range(1001): if block_covered[j]: continue ans+=block_zerocount[j] print(ans)