p=[] for i in range(1000): if i%8==0: v=list(map(int,(str(i).zfill(3))[::-1])) if 0 not in v: p+=[tuple(v)] 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 d={} for p1,p2,p3 in p: for l in range(n): z=[] ll=l z+=[y[p1][bisect_left(y[p1],ll)]] ll=l if p2==p1: ll=z[0]+1 z+=[y[p2][bisect_left(y[p2],ll)]] ll=l if p3==p1: ll=z[0]+1 if p3==p2: ll=z[1]+1 z+=[y[p3][bisect_left(y[p3],ll)]] d[(p1,p2,p3,l)]=z def solve1(l,r,v): z=d[v+(l,)] 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