/* from bisect import* n,q=map(int,input().split()) s=[*map(int,input())] e=[] for i in range(1000): if i%8==0 and'0'not in str(i): e+=[*map(int,str(i))], idx=[[]for _ in range(10)] for i in range(n): idx[s[i]]+=i, INF=1<<60 bs=[len(idx[i])-1 for i in range(10)] lr=[[*map(int,input().split())]+[i]for i in range(q)] lr.sort(key=lambda x:-x[1]) ans1=[-1]*q for l,r,nq in lr: l-=1 m=min(r-l,3) ans=INF for i in range(1,10): while 0<=bs[i]and idx[i][bs[i]]>=r: bs[i]-=1 for st in e: if m!=len(st): continue p=[0]*10 a=0 pos=r-1 mv=[] for j in range(m): ns=st[~j] k=bs[ns] if 0<=k-p[ns] using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n,q; cin>>n>>q; string s_str;cin>>s_str; vector s(n); for(int i=0;i> e; for(int i=0;i<1000;i++){ if(i%8==0){ string t=to_string(i); if(t.find('0')==string::npos){ vector digits; for(char c:t) digits.push_back(c-'0'); e.push_back(digits); } } } vector> idx(10); for(int i=0;i bs(10); for(int i=0;i<10;i++) bs[i]=(int)idx[i].size()-1; vector> lr(q); for(int i=0;i>l>>r; lr[i]={l,r,i}; } sort(lr.begin(),lr.end(),[](auto &a,auto &b){return a[1]>b[1];}); vector ans1(q,-1); for(auto [l,r,nq]:lr){ l-=1; int m=min(r-l,3); long long ans=INF; for(int i=1;i<10;i++){ while(bs[i]>=0 && idx[i][bs[i]]>=r) bs[i]--; } for(auto &st:e){ if(m!=(int)st.size()) continue; vector p(10,0); long long a=0; int pos=r-1; vector mv; for(int j=0;j