/*#include<bits/stdc++.h>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define HUGE_NUM 99999999999999999
#define MOD 1000000007
#define EPS 0.0000000001
using namespace std;


#define NUM 3005

struct point{
	int x,y;
};

struct Info{
	Info(double arg_slope,double arg_segment){
		slope=arg_slope;
		segment=arg_segment;
	}
	bool 
}*/
#include<iostream>
#include<algorithm>
using namespace std;

#define N_MAX 3000
class Point{
public:
	int x,y;
	Point(int x=0,int y=0):x(x),y(y){
		
	} 
};

int N,K;
Point P[N_MAX];
Point T[N_MAX];

bool compX(const Point &p1,const Point &p2){
	if(p1.x==p2.x)return p1.y<p2.y;
	return p1.x<p2.x;
}

bool compA(const Point &p1,const Point &p2){
	return p2.x*p1.y<p1.x*p2.y;
}

bool eq(const Point &p1,const Point &p2){
	return p2.x*p1.y==p1.x*p2.y;
}
int check(int p,int M){
	sort(T,T+M,compA);
	int maxL=1;
	int L=1;
	Point pre=T[0];
	for(int i=1;i<M;i++){
		if(eq(pre,T[i])){
			L++;
			maxL=max(maxL,L);
		}else{
			L=1;
		}
		pre=T[i];
	}
	return maxL;
}
bool solve(){
	for(int i=0;i<N;i++){
		int k=0;
		int v=0;
		for(int j=i+1;j<N;j++){
			if(P[i].x==P[j].x){
				v++;
			}
			else{
				T[k]=P[j];
				T[k].x-=P[i].x;
				T[k].y-=P[i].y;
			k++;
			}
		}
		if(1+v>=K)return true;
		if(1+check(i,k)>=K)return true;
	}
	return false;
}
int main(void){
	cin>>N>>K;
	for(int i=0;i<N;i++)cin>>P[i].x>>P[i].y;
	sort(P,P+N,compX);
	
	cout<<solve()<<endl;
	
	return 0;
}
