#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100000010;
int vis[N]; //划掉合数
int prim[N]; //记录质数
int cnt; //质数个数
void get_prim(int n){ //线性筛法
for(int i=2; i<=n; i++){
if(!vis[i]) prim[++cnt] = i;
for(int j=1; 1ll*i*prim[j]<=n; j++){
vis[i*prim[j]] = 1;
if(i%prim[j] == 0) break;
}
}
}
int main(){
int n, q, k;
scanf("%d %d", &n, &q);
get_prim(n);
while(q--){
scanf("%d", &k);
printf("%d\n", prim[k]);
}
return 0;
}
没必要用埃氏筛,这个更好