#include #include #include struct IO { static const int bufsize=1<<24; char ibuf[bufsize], obuf[bufsize]; char *ip, *op; IO(): ip(ibuf), op(obuf) { for(int t = 0, k = 0; (k = read(STDIN_FILENO, ibuf+t, sizeof(ibuf)-t)) > 0; t+=k); } ~IO(){ for(int t = 0, k = 0; (k = write(STDOUT_FILENO, obuf+t, op-obuf-t)) > 0; t+=k); } long long scan_int(){ long long x=0; bool neg=false; for(;*ip<'+';ip++) ; if(*ip=='-'){ neg=true; ip++;} else if(*ip=='+') ip++; for(;*ip>='0';ip++) x = 10*x+*ip-'0'; if(neg) x = -x; return x; } void put_int(long long x, char c=0){ static char tmp[20]; if(x==0) *op++ = '0'; else { int i; if(x<0){ *op++ = '-'; x = -x; } for(i=0; x; i++){ tmp[i] = x % 10; x /= 10; } for(i--; i>=0; i--) *op++ = tmp[i]+'0'; } if(c) *op++ = c; } void put_double(double x, char c=0){ unsigned y; const int mask = (1<<24) - 1; put_int(x); *op++ = '.'; x = x - (int) x; if(x < 0) x = -x; y = x * (1<<24); for(int i=0;i<7;i++){ y *= 10; *op++ = '0' + (y>>24); y &= mask; } if(c) *op++ = c; } inline char scan_char(){ return *ip++; } inline void put_char(char c){ *op++ = c; } inline char *scan_string(){ char *s = ip; while(*ip!='\n'&&*ip!=' ') ip++; *ip++='\0'; return s;} inline void put_string(const char *s, char c=0){ while(*s) *op++=*s++; if(c) *op++=c;} } io; using u32 = unsigned int; using u64 = unsigned long long int; template class Hash { std::array >, 1<<(n+2)> v; u32 h(u64 a) const { static constexpr u64 r = 11995408973635179863ULL; return a * r >> (64 - (n+2)); } public: T &operator[](u64 a){ u32 i = h(a); for(auto &w: v[i]){ if(w.first == a) return w.second; } v[i].emplace_back(a, T()); return v[i].back().second; } }; int n, m; int main(){ n = io.scan_int(); m = io.scan_int(); Hash h; for(int i = 0; i < n; i++){ u64 a = io.scan_int(); ++h[a]; } for(int i = 0; i < m; i++){ u64 a = io.scan_int(); io.put_int(h[a], " \n"[i == m-1]); } return 0; }