#include<stdio.h>
#define NMAX 300001
void poz(int ls,int ld,int &piv,int x[]){
int i=ls,j=ld,d=0,t;
while(i<j){
if(x[i]<x[j]){
t=x[i];x[i]=x[j];x[j]=t;
d=1-d;
}
i+=d;
j-=1-d;
}
piv=i;
}
void qsrt(int st,int dr,int x[]){
int piv;
if(st<dr){
poz(st,dr,piv,x);
qsrt(st,piv-1,x);
qsrt(piv+1,dr,x);
}
}
int main(){
struct cer{int k,p;};
freopen("tricouri.in","r",stdin);
freopen("tricouri.out","w",stdout);
int v[NMAX]={0},n;
cer w[100]={{0,0}};
int m,i,j,k,up,s[6],sm=0,sa,ok;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) scanf("%d",&v[i]);
for(j=1;j<=m;j++) scanf("%d%d",&w[j].k,&w[j].p);
qsrt(1,n,v);
for(j=1;j<=m;j++){
sm=0;ok=0;
k=1;s[k]=0;
while(k){
up=0;
while(!up&&s[k]<n){
s[k]++;
up=1;
//if(sa<=w[j].p) up++;
}
if(v[s[1]]*w[j].k<=sm) break;
if(up)
if(k==w[j].k){
sa=0;
for(i=1;i<=k;i++) sa+=v[s[i]];
if(sa%w[j].p==0) {
ok=1;
if(sm<sa) sm=sa;
if(sm>3*sa) break;
}
}
else {k++;s[k]=s[k-1];}
else k--;
}
if(ok) printf("%d\n",sm);
else printf("-1\n");
}
return 0;
}