Given a string s of length n and integer k (1 ≤ k ≤ n). The string s has a level x, if x is largest non-negative integer, such that it's possible to find in s:

  * x non-intersecting (non-overlapping) substrings of length k, 
  * all characters of these x substrings are the same (i.e. each substring contains only one distinct character and this character is the same for all the substrings). 



A substring is a sequence of consecutive (adjacent) characters, it is defined by two integers i and j (1 ≤ i ≤ j ≤ n), denoted as s[i ... j] = "s_{i}s_{i+1} ... s_{j}".

For example, if k = 2, then:

  * the string "aabb" has level 1 (you can select substring "aa"), 
  * the strings "zzzz" and "zzbzz" has level 2 (you can select two non-intersecting substrings "zz" in each of them), 
  * the strings "abed" and "aca" have level 0 (you can't find at least one substring of the length k=2 containing the only distinct character). 



Zuhair gave you the integer k and the string s of length n. You need to find x, the level of the string s.

Input

The first line contains two integers n and k (1 ≤ k ≤ n ≤ 2 ⋅ 10^5) — the length of the string and the value of k.

The second line contains the string s of length n consisting only of lowercase Latin letters.

Output

Print a single integer x — the level of the string.

Examples

Input


8 2
aaacaabb


Output


2


Input


2 1
ab


Output


1


Input


4 2
abab


Output


0

Note

In the first example, we can select 2 non-intersecting substrings consisting of letter 'a': "(aa)ac(aa)bb", so the level is 2.

In the second example, we can select either substring "a" or "b" to get the answer 1.
import java.util.*;

import java.math.*;
import java.io.*;

//Code:-
public class code1 {
	static class Reader 
	{ 
		final private int BUFFER_SIZE = 1 << 16; 
		private DataInputStream din; 
		private byte[] buffer; 
		private int bufferPointer, bytesRead; 

		public Reader() 
		{ 
			din = new DataInputStream(System.in); 
			buffer = new byte[BUFFER_SIZE]; 
			bufferPointer = bytesRead = 0; 
		} 

		public Reader(String file_name) throws IOException 
		{ 
			din = new DataInputStream(new FileInputStream(file_name)); 
			buffer = new byte[BUFFER_SIZE]; 
			bufferPointer = bytesRead = 0; 
		} 

		public String readLine() throws IOException 
		{ 
			byte[] buf = new byte[64]; // line length 
			int cnt = 0, c; 
			while ((c = read()) != -1) 
			{ 
				if (c == '\n') 
					break; 
				buf[cnt++] = (byte) c; 
			} 
			return new String(buf, 0, cnt); 
		} 

		public int nextInt() throws IOException 
		{ 
			int ret = 0; 
			byte c = read(); 
			while (c <= ' ') 
				c = read(); 
			boolean neg = (c == '-'); 
			if (neg) 
				c = read(); 
			do
			{ 
				ret = ret * 10 + c - '0'; 
			} while ((c = read()) >= '0' && c <= '9'); 

			if (neg) 
				return -ret; 
			return ret; 
		} 

		public long nextLong() throws IOException 
		{ 
			long ret = 0; 
			byte c = read(); 
			while (c <= ' ') 
				c = read(); 
			boolean neg = (c == '-'); 
			if (neg) 
				c = read(); 
			do { 
				ret = ret * 10 + c - '0'; 
			} 
			while ((c = read()) >= '0' && c <= '9'); 
			if (neg) 
				return -ret; 
			return ret; 
		} 

		public double nextDouble() throws IOException 
		{ 
			double ret = 0, div = 1; 
			byte c = read(); 
			while (c <= ' ') 
				c = read(); 
			boolean neg = (c == '-'); 
			if (neg) 
				c = read(); 

			do { 
				ret = ret * 10 + c - '0'; 
			} 
			while ((c = read()) >= '0' && c <= '9'); 

			if (c == '.') 
			{ 
				while ((c = read()) >= '0' && c <= '9') 
				{ 
					ret += (c - '0') / (div *= 10); 
				} 
			} 

			if (neg) 
				return -ret; 
			return ret; 
		} 

		private void fillBuffer() throws IOException 
		{ 
			bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); 
			if (bytesRead == -1) 
				buffer[0] = -1; 
		} 

		private byte read() throws IOException 
		{ 
			if (bufferPointer == bytesRead) 
				fillBuffer(); 
			return buffer[bufferPointer++]; 
		} 

		public void close() throws IOException 
		{ 
			if (din == null) 
				return; 
			din.close(); 
		} 
	} 
//	static boolean isPrime[];
//	public static ArrayList<Integer> seive()
//	{
//		isPrime=new boolean[(int)n];
//		
//		for(int i=0;i<n;i++)
//		{
//			isPrime[i]=true;
//		}
//		
//		for(int i=2;i*i<n;i++)
//		{
//			if(isPrime[i])
//			{
//				for(int j=i;j<n;j+=i)
//				{
//					isPrime[j]=false;
//				}
//			}
//		}
//		ArrayList<Integer>primes=new ArrayList<>();
//		for(int i=2;i<n;i++)
//		{
//			if(isPrime[i])
//			{
//				primes.add(i);
//			}
//		}
//		return primes;
//	}
	
	public static long factor(long a)
	{
		long max=-1;
		for(int i=2;i*i<=a;i++)
		{
			if(a%i==0)
			{
				max=Math.max(i,a/i);
			}
		}
		return max;
	}
	
	public static Pair countVowel(String str)
	{
		int count=0;
		char c='a';
		
		for(int i=0;i<str.length();i++)
		{
			if(str.charAt(i)=='a'||str.charAt(i)=='e'||str.charAt(i)=='i'||str.charAt(i)=='o'||str.charAt(i)=='u')
			{
				c=str.charAt(i);
				count++;
			}
		}
		Pair p=new Pair(count,c);
		
		return p;
	}
	public static int getCol(char c)
	{
		if(c=='a')
			return 0;
		if(c=='e')
			return 1;
		if(c=='i')
			return 2;
		if(c=='o')
			return 3;
		else return 4;
	}
	public static boolean diff(TreeMap<Integer,Integer>map){
		int count=0;
		int min=Integer.MAX_VALUE;
		int max=Integer.MIN_VALUE;
		ArrayList<Integer>al=new ArrayList<Integer>();
		for(Map.Entry<Integer,Integer>entry:map.entrySet())
		{
			System.out.println("key "+entry.getKey()+" val "+entry.getValue());
			al.add(entry.getValue());
		}
		Collections.sort(al);
		System.out.println("list "+al);
		int countOne=0;
		int pos=0;
		for(int i=0;i<al.size();i++)
		{
			if(al.get(i)==1)
				{
				pos=i;
				countOne++;
				}
			else break;
		}
		if(al.size()==1)
			return true;
		else if(al.get(al.size()-1)-al.get(0)>1)
			return false;
		else if(al.get(al.size()-1)==al.get(0) && al.get(0)==1)
			return true;
		else if(countOne==1 && pos==0)
			{
//			for(int i=pos+2;i<al.size();i++)
//			{
//				if(al.get(i-1)!=al.get(i))
//					return false;
//			}
			return true;
			}
		//all same except one having one more than freq;
		else if(al.get(al.size()-1)!=al.get(al.size()-2))
		{
			return true;
		}
		return false;
	}
	
	
	public static void main(String args[]) throws IOException{
	Scanner s=new Scanner(System.in);
	PrintWriter out=new PrintWriter(System.out);
	int n=s.nextInt(); 
	int k=s.nextInt();
	int ans=0;
	int[]freq=new int[26];
	String str=s.next();
	for(int a=0;a<26;a++)
	{
		int l=0;
		for(int i=0;i<n;i++)
		{
			if(str.charAt(i)==(char)'a'+a)
			{
				l++;
			}
			else
				l=0;
			if(l==k)
			{
				l=0;
				freq[a]++;
			}
			
		}
	}
	
	for(int i=0;i<26;i++)
		ans=Math.max(freq[i],ans);
	
	out.println(ans);
	out.close();
	s.close();
	}	
	
	
	static class Pair {
		int x;int y;
		Pair(int x,int y)
		{
			this.x=x;
			this.y=y;
		}
		
	}
}
/*class MyComparator implements Comparator<Pair>
{
public int compareTo()
{
	return ;
}
}*/