← Home
package main

import (
	"io"
	"os"
)

type FastScanner struct {
	data []byte
	pos  int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data}
}

func (fs *FastScanner) next() string {
	n := len(fs.data)
	for fs.pos < n && fs.data[fs.pos] <= ' ' {
		fs.pos++
	}
	start := fs.pos
	for fs.pos < n && fs.data[fs.pos] > ' ' {
		fs.pos++
	}
	return string(fs.data[start:fs.pos])
}

func (fs *FastScanner) nextInt() int {
	n := len(fs.data)
	for fs.pos < n && fs.data[fs.pos] <= ' ' {
		fs.pos++
	}
	sign := 1
	if fs.data[fs.pos] == '-' {
		sign = -1
		fs.pos++
	}
	val := 0
	for fs.pos < n && fs.data[fs.pos] > ' ' {
		val = val*10 + int(fs.data[fs.pos]-'0')
		fs.pos++
	}
	return val * sign
}

func main() {
	fs := NewFastScanner()
	n := fs.nextInt()
	m := fs.nextInt()

	rows := make([]string, n)
	cnt := make([]int, m)

	for i := 0; i < n; i++ {
		s := fs.next()
		rows[i] = s
		for j := 0; j < m; j++ {
			if s[j] == '1' {
				cnt[j]++
			}
		}
	}

	for i := 0; i < n; i++ {
		ok := true
		s := rows[i]
		for j := 0; j < m; j++ {
			if s[j] == '1' && cnt[j] == 1 {
				ok = false
				break
			}
		}
		if ok {
			os.Stdout.WriteString("YES")
			return
		}
	}

	os.Stdout.WriteString("NO")
}