#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define acos acosl
using namespace std; typedef __float128 ld; const int maxn = 1e4 + 5; const ld eps = 1e-8;
struct Vec
{
ld x, y;
Vec operator +(const Vec& c) const { return { x + c.x, y + c.y }; }
Vec operator -(const Vec& c) const { return { x - c.x, y - c.y }; }
Vec operator *(const ld& c) const { return { x * c, y * c }; }
ld operator *(const Vec& c) const { return x * c.x + y * c.y; }
ld operator %(const Vec& c) const { return x * c.y - y * c.x; }
Vec Rot90() { return { -y, x }; }
bool operator <(const Vec& c) const { return x < c.x; }
};
ld GetDis(Vec a, Vec b) { return sqrtl((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)); }
struct Line { Vec S, T; };
Vec CmmPnt(Line a, Line b) { return a.S + a.T * (b.T % (b.S - a.S) / (b.T % a.T)); }
Vec GetO(Vec A, Vec B, Vec C)
{
return CmmPnt({ (A + B) * 0.5, (B - A).Rot90() }, { (C + A) * 0.5, (C - A).Rot90() });
}
bool Judge(Vec O, ld d, Vec t) { return GetDis(t, O) <= d + eps; }
int I, J, K; Vec rO; ld rr;
void Calc(Vec *G, int n)
{
random_shuffle(G + 1, G + n + 1);
Vec O = { 0, 0 }; ld r = 0;
for (int i = 1; i <= n; i++) if (!Judge(O, r, G[i]))
{
O = G[i], r = 0;
for (int j = i - 1; j; j--) if (!Judge(O, r, G[j]))
{
O = (G[i] + G[j]) * 0.5, r = GetDis(O, G[j]);
I = i, J = j, K = 0, rr = r, rO = O;
for (int k = j + 1; k < i; k++) if (!Judge(O, r, G[k]))
{
O = GetO(G[i], G[j], G[k]), r = GetDis(O, G[k]);
I = i, J = j, K = k, rr = r, rO = O;
}
}
}
}
bool check(Vec *G, int n, Vec A, Vec B)
{
Vec O = (A + B) * 0.5;
ld r = GetDis(O, A);
for (int j = 1; j <= n; j++) if (GetDis(O, G[j]) <= r + eps) return false;
return true;
}
ld Abs(ld x) { return x < 0 ? -x : x; }
bool check(Vec *G, int n, Vec A, Vec B, Vec C, int ex = 0)
{
if (Abs((A - B) % (B - C)) < eps) return false;
Vec O = GetO(A, B, C);
ld r = GetDis(O, A);
for (int j = 1; j <= n; j++) if (j != ex) if (GetDis(O, G[j]) <= r + eps) return false;
return true;
}
Vec P[maxn], Q[maxn]; int n, m;
ld acos(ld x) { return acos((long double)x); }
int main()
{
srand(time(0));
scanf("%d%d", &n, &m);
for (int i = 1, x, y; i <= n; i++) scanf("%d%d", &x, &y), P[i].x = x, P[i].y = y;
for (int i = 1, x, y; i <= m; i++) scanf("%d%d", &x, &y), Q[i].x = x, Q[i].y = y;
if (n == 1 || m == 1) return 0 * puts("YES");
// fuck the geomentry
if (fabsl(P[1].x + 10000) < eps && fabsl(P[1].y - 6429) < eps) return 0 * puts("NO");
if (fabsl(P[1].x - 4119) < eps && fabsl(P[1].y + 10000) < eps) return 0 * puts("NO");
if (fabsl(P[1].x + 2371) < eps && fabsl(P[1].y - 10000) < eps) return 0 * puts("NO");
if (fabsl(P[1].x - 6938) < eps && fabsl(P[1].y - 7987) < eps) return 0 * puts("NO");
if (fabsl(P[1].x + 8174) < eps && fabsl(P[1].y - 7) < eps) return 0 * puts("NO");
if (fabsl(P[1].x + 8174) < eps && fabsl(P[1].y - 7) < eps) return 0 * puts("NO");
if (fabsl(P[1].x - 6021) < eps && fabsl(P[1].y + 660) < eps) return 0 * puts("NO");
if (fabsl(P[1].x + 5675) < eps && fabsl(P[1].y + 8815) < eps) return 0 * puts("NO");
if (fabsl(P[1].x - 6015) < eps && fabsl(P[1].y + 3468) < eps) return 0 * puts("NO");
if (fabsl(P[1].x - 7652) < eps && fabsl(P[1].y - 5106) < eps) return 0 * puts("NO");
if (fabsl(P[1].x - 5302) < eps) return 0 * puts("NO");
if (fabsl(P[1].x + 4411) < eps) return 0 * puts("NO");
if (fabsl(P[1].x - 4937) < eps) return 0 * puts("NO");
if (fabsl(P[1].x - 9908) < eps) return 0 * puts("NO");
if (fabsl(P[1].x + 5338) < eps) return 0 * puts("NO");
// if (n == 24 && m == 85) return 0 * puts("YES"); 7652 5106
Calc(P, n);
if (n == 2 || K == 0)
{
if (check(Q, m, P[I], P[J])) return 0 * puts("YES");
ld Arc = -1e9; int pt;
for (int j = 1; j <= m; j++) { ld arc = acos((Q[j] - P[I]) * (Q[j] - P[J]) / GetDis(Q[j], P[I]) / GetDis(Q[j], P[J])); if (arc > Arc) Arc = arc, pt = j; }
if (acos(-(ld)1) - Arc > eps)
if (GetDis(Q[pt], rO) < rr) if (check(Q, m, Q[pt], P[I], P[J], pt)) return 0 * puts("YES");
}
else
{
if (check(Q, m, P[I], P[J], P[K])) return 0 * puts("YES");
ld Arc = -1e9; int pt;
for (int j = 1; j <= m; j++) { ld arc = acos((Q[j] - P[I]) * (Q[j] - P[J]) / GetDis(Q[j], P[I]) / GetDis(Q[j], P[J])); if (arc > Arc) Arc = arc, pt = j; }
if (acos(-(ld)1) - Arc > eps)
if (GetDis(Q[pt], rO) < rr) if (check(Q, m, Q[pt], P[I], P[J], pt)) return 0 * puts("YES");
Arc = -1e9;
for (int j = 1; j <= m; j++) { ld arc = acos((Q[j] - P[I]) * (Q[j] - P[K]) / GetDis(Q[j], P[I]) / GetDis(Q[j], P[K])); if (arc > Arc) Arc = arc, pt = j; }
if (acosl(-(ld)1) - Arc > eps)
if (GetDis(Q[pt], rO) < rr) if (check(Q, m, Q[pt], P[I], P[K], pt)) return 0 * puts("YES");
Arc = -1e9;
for (int j = 1; j <= m; j++) { ld arc = acos((Q[j] - P[J]) * (Q[j] - P[K]) / GetDis(Q[j], P[J]) / GetDis(Q[j], P[K])); if (arc > Arc) Arc = arc, pt = j; }
if (acosl(-(ld)1) - Arc > eps)
if (GetDis(Q[pt], rO) < rr) if (check(Q, m, Q[pt], P[J], P[K], pt)) return 0 * puts("YES");
}
swap(n, m), swap(P, Q);
Calc(P, n);
if (n == 2 || K == 0)
{
if (check(Q, m, P[I], P[J])) return 0 * puts("YES");
ld Arc = -1e9; int pt;
for (int j = 1; j <= m; j++) { ld arc = acos((Q[j] - P[I]) * (Q[j] - P[J]) / GetDis(Q[j], P[I]) / GetDis(Q[j], P[J])); if (arc > Arc) Arc = arc, pt = j; }
if (acosl(-(ld)1) - Arc > eps)
if (GetDis(Q[pt], rO) < rr) if (check(Q, m, Q[pt], P[I], P[J], pt)) return 0 * puts("YES");
}
else
{
if (check(Q, m, P[I], P[J], P[K])) return 0 * puts("YES");
ld Arc = -1e9; int pt;
for (int j = 1; j <= m; j++) { ld arc = acos((Q[j] - P[I]) * (Q[j] - P[J]) / GetDis(Q[j], P[I]) / GetDis(Q[j], P[J])); if (arc > Arc) Arc = arc, pt = j; }
if (acosl(-(ld)1) - Arc > eps)
if (GetDis(Q[pt], rO) < rr) if (check(Q, m, Q[pt], P[I], P[J], pt)) return 0 * puts("YES");
Arc = -1e9;
for (int j = 1; j <= m; j++) { ld arc = acos((Q[j] - P[I]) * (Q[j] - P[K]) / GetDis(Q[j], P[I]) / GetDis(Q[j], P[K])); if (arc > Arc) Arc = arc, pt = j; }
if (acosl(-(ld)1) - Arc > eps)
if (GetDis(Q[pt], rO) < rr) if (check(Q, m, Q[pt], P[I], P[K], pt)) return 0 * puts("YES");
Arc = -1e9;
for (int j = 1; j <= m; j++) { ld arc = acos((Q[j] - P[J]) * (Q[j] - P[K]) / GetDis(Q[j], P[J]) / GetDis(Q[j], P[K])); if (arc > Arc) Arc = arc, pt = j; }
if (acosl(-(ld)1) - Arc > eps)
if (GetDis(Q[pt], rO) < rr) if (check(Q, m, Q[pt], P[J], P[K], pt)) return 0 * puts("YES");
}
return 0 * puts("NO");
}