433 3
FZDDHMJGBZCHFUXBBPIEBBEFDWOMXXEPOMDGSMPIUZOMRZQNSJAVNATGIWPDFISKFQXJNVFXPHOZDAEZFDAHDXXQKZMGNSGKQNWGNGJGJZVVITKNFLVCPMZSDMCHBTVAWYVZLIXXIADXNYILEYNIQHKMOGMVOCWGHCWIYMPEPADSJAAKEGTUSEDWAHMNYJDIHBKHVUHLYGNGZDBULRXLSAJHPCMNWCEAAPYMHDTYWPADOTJTXTXUKLCHWKUSZRHEKQEFPVJEJJHRWCKYOIWALRTIBUMNOCRXLSIKQCJVQXEPGOHRUDJDKMUUUDORURWXJNVRVMNOUNRFKSVMTMZGOIJLXEPAMVGESOADYIGZXRBJDIWKNOWTCSROAQTBECHTOZVSQUOOJRZIBAUHMKAXDCIMDZJFMABGRNTGPUJAUNFPFWCJG
 6 2
ABCABC
 41 19
TMEYYIIELFDCMBDKWWKYNRNDUPRONYROXQCLVQALP
 5 2
ABACA
 377 3
EADADBBBBDEAABBAEBABACDBDBBCACAADBEAEACDEAABACADEEDEACACDADABBBBDDEECBDABACACBAECBADAEBDEEBDBCDAEADBCDDACACDCCEEDBCCBBCEDBECBABCDDBBDEADEDAEACDECECBEBACBCCDCDBDAECDECADBCBEDBBDAAEBCAAECCDCCDBDDEBADEEBDCAEABBDEDBBDDEAECCBDDCDEACDAECCBDDABABEAEDCDEDBAECBDEACEBCECEACDCBABCBAAEAADACADBBBBABEADBCADEBCBECCABBDDDEEBCDEBADEBDAAABBEABADEDEAEABCEEBEEDEAEBEABCEDDBACBCCADEBAAAAAEABABBCE
 3 26
AAB
 27 1
ABCDEFGHIJKLMNOPQRSTUVWXYZA
 73 2
DEBECECBBADAADEAABEAEEEAEBEAEBCDDBABBAEBACCBEEBBAEADEECACEDEEDABACDCDBBBD
 7 2
ABCDBCD
 5 1
AZAZA
 44 15
HGJIFCGGCDGIJDHBIBGAEABCIABIGBDEADBBBAGDFDHA
 5 2
ABCAB
 8 3
ABCBCDCA
 26 1
ABCDEFGHIJKLMNOPQRSTUVWXYZ

YES
 YES
 NO
 NO
 YES
 NO
 YES
 YES
 YES
 YES
 NO
 YES
 NO
 NO

import java.io.BufferedReader;
	import java.io.IOException;
	import java.io.InputStreamReader;
	import java.io.PrintWriter;
import java.util.Map.Entry;
import java.util.*;		
	
	
	   public class Main {
	
	
		   
		   
		/*public static int ispr(int n)
	    	{	
	    	//boolean[] isPrime = new boolean[n+1];
	        for (int i = 2; i <= n; i++) {
	            Prime[i] = true;
	        }
	
	        // mark non-primes <= n using Sieve of Eratosthenes
	        for (int factor = 2; factor*factor <= n; factor++) {
	
	            // if factor is prime, then mark multiples of factor as nonprime
	            // suffices to consider mutiples factor, factor+1, ...,  n/factor
	            if (Prime[factor]) {
	                for (int j = factor; factor*j <= n; j++) {
	                    Prime[factor*j] = false;
	                }
	            }	
	        }	
	        // count primes
	
	        /*int primes = 0;
	        for (int i = 2; i <= n; i++) {
	            if (isPrime	[i])System.out.println(i);
	
	
	        }*/
		// System.out.println("The number of primes <= " + n + " is " + primes);
		//return 0;
		// if(isPrime[n]==true)return 1; else return 0;
	
		//}
	
	
	
	
	
	
	
		public static long fact(long x)
		{
			if(x==0)return 1;
			else return x*fact(x-1);
		}
	
	
		public static long exp(long x, long n, long M)
		{
	
			if(n==0) return 1;
	
			else if(n%2==0) return exp((x*x)%M,n/2,M);
			else return (x*exp((x*x)%M,(n-1)/2,M))%M;
	
		}
	
		//fi
	
		static long fib(long n)
		{
			long F[][] = new long[][]{{1,1},{1,0}};
			if (n == 0)
				return 0;
			power(F, n-1);
	
			return F[0][0];
		}
	
		static int mod=1000000007;
		
		static void multiply(long F[][], long M[][])
		{
			long x =  (((F[0][0]%mod)*(M[0][0]%mod))%mod + ((F[0][1]%mod)*(M[1][0]%mod))%mod)%mod;
			long y =  (((F[0][0]%mod)*(M[0][1]%mod))%mod + ((F[0][1]%mod)*(M[1][1]%mod))%mod)%mod;
			long z =  (((F[1][0]%mod)*(M[0][0]%mod))%mod + ((F[1][1]%mod)*(M[1][0]%mod))%mod)%mod;
			long w =  (((F[1][0]%mod)*(M[0][1]%mod))%mod + ((F[1][1]%mod)*(M[1][1]%mod))%mod)%mod;
	
			F[0][0] = x;
			F[0][1] = y;
			F[1][0] = z;
			F[1][1] = w;
		}
	
		/* Optimized version of power() in method 4 */
		static void power(long F[][], long n)				
		{
			if( n == 0 || n == 1)
				return;
			long M[][] = new long[][]{{1,1},{1,0}};
	
			power(F, n/2);
			multiply(F, F);
	
			if (n%2 != 0)
				multiply(F, M);
		}
	
	
	
	
		public static int gcd(int a, int b)
		{
			if(b==0)
				return a;
			else return gcd(b,a%b);
		}
	
		static  class MyScanner {
	
			BufferedReader br;
			StringTokenizer st;
	
			public MyScanner() {
				br = new BufferedReader(new InputStreamReader(System.in));
			}
	
			String next() {
				while (st == null || !st.hasMoreElements()) {
					try {
						st = new StringTokenizer(br.readLine());
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				return st.nextToken();
			}
	
			int nextInt() {
				return Integer.parseInt(next());
			}
	
			long nextLong() {
				return Long.parseLong(next());
			}
	
			double nextDouble() {
				return Double.parseDouble(next());
			}
	
			String nextLine(){
				String str = "";
				try {
					str = br.readLine();
				} catch (IOException e) {
					e.printStackTrace();
				}
				return str;
			}
	
		}
	
		static MyScanner sc = new  MyScanner();
		static PrintWriter pw = new PrintWriter(System.out, true);
		
	
		
		static void printPath(int parent[], int j)
		{
		    // Base Case : If j is source
		    if (parent[j]==-1)
		        {pw.print(j+" ");return;}
	
		    printPath(parent, parent[j]);
	
		    pw.print(j+" ");
		}
		
		
		//Main begins here :)
		
		public static class Pair{
		    int a;
		    int b;
		    Pair(int p,int q){
		        a=p;
		        b=q;
		    }
		    public boolean equals(Object o) {
		        if (o instanceof Pair) {
		            Pair p = (Pair)o;
		            return p.a == a && p.b == b;
		        }
		        return false;
		    }
		    public int hashCode() {
		        return new Integer(a).hashCode() * 31 + new Integer(b).hashCode();
		    }
		}
		
	
	
	
		
		public static int max1(String st, int k)
		{
			int n1=0;
			int max=Integer.MIN_VALUE;
			int n = st.length();
			if(n==1)
			{
				if(st.charAt(0)=='1')return 1;
				else return 0;
			}
			
			for(int i=1;i<=k;i++)
			{
				int chp=i-1;
				
				if(st.charAt(chp)=='1')n1++;
				
			}
			max=Math.max(max, n1);
		//	if(k>=n)return max;
			int slides=n-k;
			int ptr1=0, ptr2=k-1;
			
			for(int i=1;i<=slides;i++)
			{
				//pw.println(st.substring(ptr1+i, ptr2+i+1));
				ptr1++; ptr2++;
				if(st.charAt(ptr1-1)=='1')n1--;
				if(st.charAt(ptr2)=='1')n1++;
				//pw.println("m1- "+n1);
				if(n1>max)max=n1;
				if(max==k){return k;}
			}
			
			return max;
			
		}
			
		
		public static String shift(String A)
		{
			char lc = A.charAt(A.length()-1);
			return lc+A.substring(0,A.length()-1);
			
		}
		
	
		
		
		
		static class Point
		{
			long x,y;
	
			public Point(long a, long b)
			{
				x=a;
				y=b;
			}
	
	
		}
	
		static class compx implements Comparator<Point>
		{
			public int compare(Point a, Point b)
			{
	
				if(a.x>b.x)return 1;
				if(a.x<b.x) return -1;
					
				return 0;
			}
		}
	
		
		public static int value(String st,int si,int k, int mpos)
		{
		     
		     if(k>=st.length())return mpos;
		     int max=0;
		     int long1=0;
		     int len = st.length();
		     for(int i=0;i<len;i++)
		     {
		          int ri = (si+i)%len;
		          if(st.charAt(ri)=='0')long1=0;
		          else
		          {
		               long1++;
		               if(long1>max)max=long1;
		               if(max==k)return k;
		          }
		          
		     }
		     return max;
		     
		     
		     
		     
		}
		
			public static long ret(long x)
			{
				if(x==0)return 1;
				if(x==1)return 2;
				
				return 2+(((x+2)*(x-1))/2);
				
			}
		
			
			
			static class Myset
			{
				int size;
				int[] arr;
				int noe;
				
				Myset(int n)
				{
					size=n;
					arr= new int[n];
					Arrays.fill(arr, -1);
					noe =0; 
						
				}
				
				void add(int el)
				{
					if(arr[el]==-1)
					{
						arr[el]=1;
						noe++;
					}
					
				}
			
			
			
			}
		
		public static void main(String[] args) {
	
			
				int n = sc.nextInt();
				int k = sc.nextInt();
				
				String s = sc.nextLine();
				//int no[] = new int[n];
				int nor=0;
				int[] alpha = new int[26];
				int last[] = new int[26];
				Arrays.fill(last, -1);
				Arrays.fill(alpha, -1);
				int maxi = Integer.MIN_VALUE;
				
				for(int i=n-1;i>=0;i--)
				{
					char cc = s.charAt(i);
					if(last[cc-65]==-1)last[cc-65]=i;
					
					
					
				}
				/*
				 * 
				 * 
				 * 
				 * */
				for(int i=0;i<n;i++)
				{
					char cc = s.charAt(i);
					if(alpha[cc-65]==-1||i==last[cc-65])
					{
						if(alpha[cc-65]==-1)
						{
							nor++;
							alpha[cc-65]=1;
							maxi = Math.max(maxi, nor);
							if(last[cc-65]==i)nor--;
						
						}
						else
						{
							nor--;
							alpha[cc-65]=2;
							maxi = Math.max(maxi, nor);
							
						}
						
					}
					
				}
				String A = (maxi>k)?"YES":"NO";
				
				//pw.println(maxi+" "+nor);
				pw.println(A);
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			pw.close();
			/*int t =sc.nextInt();
			while(t-->0)
			{
				int x = sc.nextInt();
				long k =sc.nextLong();
				String st = sc.nextLine();
				long na=0,nb=0;
				for(int i=0;i<x;i++)
				{
					if(st.charAt(i)=='a')na++;
					if(st.charAt(i)=='b')nb++;
					
				}
				long bs[] = new long[x];
				bs[x-1]=(st.charAt(x-1)=='b')?1:0;
				
				for(int i=x-2;i>=0;i--)
				{
					bs[i]=(st.charAt(i)=='b')?(bs[i+1]+1):bs[i+1];
				}
				int c=0;
				
				for(int i=0;i<x;i++)
				{
					if(st.charAt(i)=='a')
					{
						c+=bs[i];
						
					}
			
					
				}
				long k2 = k-1;
				long ans = ((long)k2*(k2+1))/2;
				ans = ans*na*nb;
				ans += (c*k);
				
				pw.println(ans);
				
			}
		*/
			
			
	
		}
		
		}
	
	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	