#include<bits/stdc++.h>
#define file "point_in_polygon"
using namespace std;
#define int long long
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x.size())
const int NN = 1e3 + 9;
struct point {
int x, y;
};
int n, m;
point p[NN];
int cross(point a, point b, point c) {
point ab={b.x-a.x,b.y-a.y};
point ac={c.x-a.x,c.y-a.y};
return ab.x*ac.y-ab.y*ac.x;
}
bool onSegment(point a, point b, point c) {
return cross(a,b,c)==0 &&
min(a.x,c.x)<=b.x && b.x<=max(a.x,c.x) &&
min(a.y,c.y)<=b.y && b.y<=max(a.y,c.y);
}
int isInside(point q) {
int dem=0;
for (int i=1;i<=n;i++) {
point a=p[i];
point b=p[i+1];
if (onSegment(a,q,b)) return -1;
if (a.y>b.y) swap(a,b);
if (a.y<q.y && q.y<=b.y && cross(a,b,q)>0)
dem++;
}
return dem%2;
}
void process() {
cin>>n>>m;
for (int i=1;i<=n;i++)
cin>>p[i].x>>p[i].y;
p[n+1]=p[1];
for (int i=1;i<=m;i++) {
point q;
cin>>q.x>>q.y;
int res=isInside(q);
if (res==-1) cout<<"BOUNDARY";
else if (res==1) cout<<"INSIDE";
else cout<<"OUTSIDE";
cout<<endl;
}
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
// freopen(file".inp","r",stdin);
// freopen(file".out","w",stdout);
int t=1;
// cin>>t;
while (t--) process();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmaWxlICJwb2ludF9pbl9wb2x5Z29uIgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgWCBmaXJzdAojZGVmaW5lIFkgc2Vjb25kCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIHN6KHgpIChpbnQpKHguc2l6ZSgpKQoKY29uc3QgaW50IE5OID0gMWUzICsgOTsKCnN0cnVjdCBwb2ludCB7CiAgICBpbnQgeCwgeTsKfTsKCmludCBuLCBtOwpwb2ludCBwW05OXTsKCmludCBjcm9zcyhwb2ludCBhLCBwb2ludCBiLCBwb2ludCBjKSB7CiAgICBwb2ludCBhYj17Yi54LWEueCxiLnktYS55fTsKICAgIHBvaW50IGFjPXtjLngtYS54LGMueS1hLnl9OwogICAgcmV0dXJuIGFiLngqYWMueS1hYi55KmFjLng7Cn0KCmJvb2wgb25TZWdtZW50KHBvaW50IGEsIHBvaW50IGIsIHBvaW50IGMpIHsKICAgIHJldHVybiBjcm9zcyhhLGIsYyk9PTAgJiYKICAgICAgICAgICBtaW4oYS54LGMueCk8PWIueCAmJiBiLng8PW1heChhLngsYy54KSAmJgogICAgICAgICAgIG1pbihhLnksYy55KTw9Yi55ICYmIGIueTw9bWF4KGEueSxjLnkpOwp9CgppbnQgaXNJbnNpZGUocG9pbnQgcSkgewogICAgaW50IGRlbT0wOwogICAgZm9yIChpbnQgaT0xO2k8PW47aSsrKSB7CiAgICAgICAgcG9pbnQgYT1wW2ldOwogICAgICAgIHBvaW50IGI9cFtpKzFdOwogICAgICAgIGlmIChvblNlZ21lbnQoYSxxLGIpKSByZXR1cm4gLTE7CiAgICAgICAgaWYgKGEueT5iLnkpIHN3YXAoYSxiKTsKICAgICAgICBpZiAoYS55PHEueSAmJiBxLnk8PWIueSAmJiBjcm9zcyhhLGIscSk+MCkKICAgICAgICAgICAgZGVtKys7CiAgICB9CiAgICByZXR1cm4gZGVtJTI7Cn0KCnZvaWQgcHJvY2VzcygpIHsKICAgIGNpbj4+bj4+bTsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykKICAgICAgICBjaW4+PnBbaV0ueD4+cFtpXS55OwogICAgcFtuKzFdPXBbMV07CiAgICBmb3IgKGludCBpPTE7aTw9bTtpKyspIHsKICAgICAgICBwb2ludCBxOwogICAgICAgIGNpbj4+cS54Pj5xLnk7CiAgICAgICAgaW50IHJlcz1pc0luc2lkZShxKTsKICAgICAgICBpZiAocmVzPT0tMSkgY291dDw8IkJPVU5EQVJZIjsKICAgICAgICBlbHNlIGlmIChyZXM9PTEpIGNvdXQ8PCJJTlNJREUiOwogICAgICAgIGVsc2UgY291dDw8Ik9VVFNJREUiOwogICAgICAgIGNvdXQ8PGVuZGw7CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkgewogICAgY2luLnRpZSgwKS0+c3luY193aXRoX3N0ZGlvKDApOwovLyAgICBmcmVvcGVuKGZpbGUiLmlucCIsInIiLHN0ZGluKTsKLy8gICAgZnJlb3BlbihmaWxlIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgaW50IHQ9MTsKICAgIC8vIGNpbj4+dDsKICAgIHdoaWxlICh0LS0pIHByb2Nlc3MoKTsKICAgIHJldHVybiAwOwp9Cg==