p=[] for i in range(1000): if i%8==0: p+=[tuple(list(map(int,(str(i).zfill(3))[::-1])))] n,Q=map(int,input().split()) s=list(map(int,input()))[::-1] y=[[] for i in range(10)] for i in range(n): y[s[i]]+=[i] X=n*3 for i in range(10): for j in range(3): y[i]+=[X*(i*3+j+1)] from bisect import bisect_left from functools import cache @cache def search(i,l): return y[i][bisect_left(y[i],l)] def solve1(l,r,p): z=[] ll=l z+=[search(p[0],ll)] ll=l if p[1]==p[0]: ll=z[0]+1 z+=[search(p[1],ll)] ll=l if p[2]==p[0]: ll=z[0]+1 if p[2]==p[1]: ll=z[1]+1 z+=[search(p[2],ll)] if max(z)>r: return X z[0]-=l z[1]-=l z[2]-=l return solve2(z) def solve2(z): p1,p2,p3=z if p1