#include <cstdio>
#include <iostream>
#include <vector>
#include <list>
#include <cmath>
#include <fstream>
#include <algorithm>
#include <string>
#include <queue>
#include <set>
#include <map>
#include <complex>
#include <iterator>
#include <cstdlib>
#include <cstring>
#include <sstream>

using namespace std;

#define EPS (1e-10)
#define EQ(a,b) (abs((a) - (b)) < EPS)
#define EQV(a,b) (EQ((a).real(),(b).real()) && EQ((a).imag(),(b).imag()))

typedef complex<double> P;
typedef pair<P,P> Edge;
typedef long long ll;

const double PI=4*atan(1.0);

void fast_stream(){
	std::ios_base::sync_with_stdio(0);
}
	
//#define RED_FILE

#ifdef RED_FILE
ifstream ifs("input.txt");
ofstream ofs("output.txt");
#define cin ifs
#define cout ofs
#endif

int n,m;
P bp[1000];
P wp[1000];

// àÏ
double dot(P a, P b) {
  return (a.real() * b.real() + a.imag() * b.imag());
}
// OÏ
double cross(P a, P b) {
  return (a.real() * b.imag() - a.imag() * b.real());
}
// _a,bðÊé¼üÆ_cÌÔÌ£
double distance_l_p(P a, P b, P c) {
  return abs(cross(b-a, c-a)) / abs(b-a);
}

// E¤Ìvfª éFÅ é©Ç¤©`FbN
bool checkRIghtincludeLine(P a,P b,bool isW){
    if(isW){
        for(int i = 0; i < m; i++){
            if(EQ(a.real(),b.real())){
                if(wp[i].real()<a.real()&&!EQ(wp[i].real(),a.real()))
                    return false;
            }
            else{
                // y=d*x+e
                double d=(a.imag()-b.imag())/(a.real()-b.real());
                double e=b.imag()-b.real()*d;
                if(!(d*wp[i].real()+e>wp[i].imag()||EQ(d*wp[i].real()+e,wp[i].imag())))
                    return false;
            }
        }
        for(int i = 0; i < n; i++){
            if(EQ(a.real(),b.real())){
                if(!(bp[i].real()<a.real()&&!EQ(bp[i].real(),a.real())))
                    return false;
            }
            else{
                // y=d*x+e
                double d=(a.imag()-b.imag())/(a.real()-b.real());
                double e=b.imag()-b.real()*d;
                if((d*bp[i].real()+e>bp[i].imag()||EQ(d*bp[i].real()+e,bp[i].imag())))
                    return false;
            }
        }
        return true;
    }
    else{
        for(int i = 0; i < n; i++){
            if(EQ(a.real(),b.real())){
                if((bp[i].real()<a.real()&&!EQ(bp[i].real(),a.real())))
                    return false;
            }
            else{
                // y=d*x+e
                double d=(a.imag()-b.imag())/(a.real()-b.real());
                double e=b.imag()-b.real()*d;
                if(!(d*bp[i].real()+e>bp[i].imag()||EQ(d*bp[i].real()+e,bp[i].imag())))
                    return false;
            }
        }
        for(int i = 0; i < m; i++){
            if(EQ(a.real(),b.real())){
                if(!(wp[i].real()<a.real()&&!EQ(wp[i].real(),a.real())))
                    return false;
            }
            else{
                // y=d*x+e
                double d=(a.imag()-b.imag())/(a.real()-b.real());
                double e=b.imag()-b.real()*d;
                if((d*wp[i].real()+e>wp[i].imag()||EQ(d*wp[i].real()+e,wp[i].imag())))
                    return false;
            }
        }
        return true;
    }
}
// ¶¤Ìvfª éFÅ é©Ç¤©`FbN
bool checkLeftincludeLine(P a,P b,bool isW){
    if(isW){
        for(int i = 0; i < m; i++){
            if(EQ(a.real(),b.real())){
                if(wp[i].real()>a.real()&&!EQ(wp[i].real(),a.real()))
                    return false;
            }
            else{
                // y=d*x+e
                double d=(a.imag()-b.imag())/(a.real()-b.real());
                double e=b.imag()-b.real()*d;
                if(!(d*wp[i].real()+e<wp[i].imag()||EQ(d*wp[i].real()+e,wp[i].imag())))
                    return false;
            }
        }
        for(int i = 0; i < n; i++){
            if(EQ(a.real(),b.real())){
                if(!(bp[i].real()>a.real()&&!EQ(bp[i].real(),a.real())))
                    return false;
            }
            else{
                // y=d*x+e
                double d=(a.imag()-b.imag())/(a.real()-b.real());
                double e=b.imag()-b.real()*d;
                if((d*bp[i].real()+e<bp[i].imag()||EQ(d*bp[i].real()+e,bp[i].imag())))
                    return false;
            }
        }
        return true;
    }
    else{
        for(int i = 0; i < n; i++){
            if(EQ(a.real(),b.real())){
                if((bp[i].real()>a.real()&&!EQ(bp[i].real(),a.real())))
                    return false;
            }
            else{
                // y=d*x+e
                double d=(a.imag()-b.imag())/(a.real()-b.real());
                double e=b.imag()-b.real()*d;
                if(!(d*bp[i].real()+e<bp[i].imag()||EQ(d*bp[i].real()+e,bp[i].imag())))
                    return false;
            }
        }
        for(int i = 0; i < m; i++){
            if(EQ(a.real(),b.real())){
                if(!(wp[i].real()>a.real()&&!EQ(wp[i].real(),a.real())))
                    return false;
            }
            else{
                // y=d*x+e
                double d=(a.imag()-b.imag())/(a.real()-b.real());
                double e=b.imag()-b.real()*d;
                if((d*wp[i].real()+e<wp[i].imag()||EQ(d*wp[i].real()+e,wp[i].imag())))
                    return false;
            }
        }
        return true;
    }
}

int main(){

    while(cin>>n>>m&&!(n==0&&m==0)){
        for(int i = 0; i < n; i++){
            int x,y;
            cin>>x>>y;
            bp[i]=P(x,y);
        }
        for(int i = 0; i < m; i++){
            int x,y;
            cin>>x>>y;
            wp[i]=P(x,y);
        }
        if(n==1&&m==1){
            cout<<"YES"<<endl;
            continue;
        }
        if(m!=1){
            // 2_ðIñÅ¼üðì¬µAe_ª»Ì¼üÅ®SÉªÅ«é©²×é
            bool ok=false;
            for(int i = 0; i < m; i++){
                for(int j = 0; j < m; j++){
                    bool isLeft=false;
                    bool no=false;
                    // xªêv
                    if(EQ(wp[i].real(),wp[j].real())){
                        // Ç¿çÌvfªÇ¿çÉ®·é©
                        for(int k = 0; k < n; k++){
                            if(EQ(bp[k].real(),wp[i].real())){
                                no=true;
                                break;
                            }
                            else{
                                if(bp[k].real()<wp[i].real()){
                                    isLeft=true;
                                    break;
                                }
                                else{
                                    isLeft=false;
                                    break;
                                }
                            }
                        }
                        if(no)continue;
                    }
                    else{
                        // y=d*x+e
                        double d=(wp[i].imag()-wp[j].imag())/(wp[i].real()-wp[j].real());
                        double e=wp[j].imag()-wp[j].real()*d;
                        // Ç¿çÌvfªÇ¿çÉ®·é©
                        for(int k = 0; k < n; k++){
                            if(EQ(d*bp[k].real()+e,bp[k].imag())){
                                no=true;
                                break;
                            }
                            else{
                                if(d*bp[k].real()+e<bp[k].imag()){
                                    isLeft=true;
                                    break;
                                }
                                else{
                                    isLeft=false;
                                    break;
                                }
                            }
                        }
                        if(no)continue;
                    }
                    // ¶Éª®
                    if(isLeft){
                        if(checkRIghtincludeLine(wp[i],wp[j],true)){
                            // ok
                            ok=true;
                            break;
                        }
                    }
                    // E
                    else{
                        if(checkLeftincludeLine(wp[i],wp[j],true)){
                            // ok
                            ok=true;
                            break;
                        }
                    }
                }
                if(ok)break;
            }
            if(ok){
                cout<<"YES"<<endl;
                continue;
            }
        }
        if(n!=1){
            // 2_ðIñÅ¼üðì¬µAe_ª»Ì¼üÅ®SÉªÅ«é©²×é
            bool ok=false;
            for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++){
                    bool isLeft=false;
                    bool no=false;
                    // xªêv
                    if(EQ(bp[i].real(),bp[j].real())){
                        // Ç¿çÌvfªÇ¿çÉ®·é©
                        for(int k = 0; k < m; k++){
                            if(EQ(wp[k].real(),bp[i].real())){
                                no=true;
                                break;
                            }
                            else{
                                if(wp[k].real()<bp[i].real()){
                                    isLeft=true;
                                    break;
                                }
                                else{
                                    isLeft=false;
                                    break;
                                }
                            }
                        }
                        if(no)continue;
                    }
                    else{
                        // y=d*x+e
                        double d=(bp[i].imag()-bp[j].imag())/(bp[i].real()-bp[j].real());
                        double e=bp[j].imag()-bp[j].real()*d;
                        // Ç¿çÌvfªÇ¿çÉ®·é©
                        for(int k = 0; k < m; k++){
                            if(EQ(d*wp[k].real()+e,wp[k].imag())){
                                no=true;
                                break;
                            }
                            else{
                                if(d*wp[k].real()+e<wp[k].imag()){
                                    isLeft=true;
                                    break;
                                }
                                else{
                                    isLeft=false;
                                    break;
                                }
                            }
                        }
                        if(no)continue;
                    }
                    // ¶Éª®
                    if(isLeft){
                        if(checkRIghtincludeLine(bp[i],bp[j],false)){
                            // ok
                            ok=true;
                            break;
                        }
                    }
                    // E
                    else{
                        if(checkLeftincludeLine(bp[i],bp[j],false)){
                            // ok
                            ok=true;
                            break;
                        }
                    }
                }
                if(ok)break;
            }
            if(ok){
                cout<<"YES"<<endl;
                continue;
            }
        }
        cout<<"NO"<<endl;
    }

    return 0;
}

Measured memory_bytes: 888