//intのオーバーフローに気をつけろ,AGCはだいたいlongにしておけ
//毎回余りを求めることでオーバーフローしなくなる
//nextLineよりnextだ
//charは''で囲うんだぞ
//読み込みは先に全部やっておけ
//for文を回す回数に気をつけろ
	//for文は10^3の三重はTLE,10^5の二重はTLE,10^9のforはTLE
//貪欲は使えるか？？試した？？

import java.util.Scanner;

public class Main {

	public static void main(String args[]) throws InterruptedException {
		    Scanner sc = new Scanner(System.in);

		    int n = sc.nextInt(); //都市
		    int m = sc.nextInt(); //道
		    int[] road = new int[2*m];
		    int[] counter = new int[n];
		    for(int i = 0; i < 2 * m; i++) {
		    	road[i] = sc.nextInt();
		    }
		    for(int i = 0; i < n; i++) {
		    	counter[i] = 0;
		    }
		    //入力
		    
		    for(int i = 0; i < 2*m; i++) {
		    	counter[road[i]-1]++;
		    }
		    //シミュレート
		    
		    for(int i = 0; i < n; i++) {
		    	System.out.println(counter[i]);
		    }
		    //出力
		    sc.close(); }

	public static void saiki(int a, String b) {
		//再帰コーディングのお手本

		if(a == 0) {
			System.out.println(b);
		}else {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		}
	}

	public static  int gcd(int a, int b) {
	    if (a < b) {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    }

	    int r = -1;
	    while (r != 0) {
	        r = a % b;
	        a = b;
	        b = r;
	    }

	    return a;
	}
} import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String args[]) throws InterruptedException {
		    Scanner sc = new Scanner(System.in);

		    int n = sc.nextInt(); //都市
		    int m = sc.nextInt(); //道
		    int[] road = new int[2*m];
		    int[] counter = new int[n];
		    for(int i = 0; i < 2 * m; i++) {
		    	road[i] = sc.nextInt();
		    }
		    for(int i = 0; i < n; i++) {
		    	counter[i] = 0;
		    }
		    //入力
		    
		    for(int i = 0; i < 2*m; i++) {
		    	counter[road[i]-1]++;
		    }
		    //シミュレート
		    
		    for(int i = 0; i < n; i++) {
		    	System.out.println(counter[i]);
		    }
		    //出力
		    sc.close(); }

	public static void saiki(int a, String b) {
		//再帰コーディングのお手本

		if(a == 0) {
			System.out.println(b);
		}else {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		}
	}

	public static  int gcd(int a, int b) {
	    if (a < b) {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    }

	    int r = -1;
	    while (r != 0) {
	        r = a % b;
	        a = b;
	        b = r;
	    }

	    return a;
	}
} Main public static void main(String args[]) throws InterruptedException {
		    Scanner sc = new Scanner(System.in);

		    int n = sc.nextInt(); //都市
		    int m = sc.nextInt(); //道
		    int[] road = new int[2*m];
		    int[] counter = new int[n];
		    for(int i = 0; i < 2 * m; i++) {
		    	road[i] = sc.nextInt();
		    }
		    for(int i = 0; i < n; i++) {
		    	counter[i] = 0;
		    }
		    //入力
		    
		    for(int i = 0; i < 2*m; i++) {
		    	counter[road[i]-1]++;
		    }
		    //シミュレート
		    
		    for(int i = 0; i < n; i++) {
		    	System.out.println(counter[i]);
		    }
		    //出力
		    sc.close(); } main {
		    Scanner sc = new Scanner(System.in);

		    int n = sc.nextInt(); //都市
		    int m = sc.nextInt(); //道
		    int[] road = new int[2*m];
		    int[] counter = new int[n];
		    for(int i = 0; i < 2 * m; i++) {
		    	road[i] = sc.nextInt();
		    }
		    for(int i = 0; i < n; i++) {
		    	counter[i] = 0;
		    }
		    //入力
		    
		    for(int i = 0; i < 2*m; i++) {
		    	counter[road[i]-1]++;
		    }
		    //シミュレート
		    
		    for(int i = 0; i < n; i++) {
		    	System.out.println(counter[i]);
		    }
		    //出力
		    sc.close(); } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int m = sc.nextInt(); m sc.nextInt() sc.nextInt sc int[] road = new int[2*m]; road new int[2*m] 2*m 2 m int[] counter = new int[n]; counter new int[n] n for(int i = 0; i < 2 * m; i++) {
		    	road[i] = sc.nextInt();
		    } int i = 0; int i = 0; i 0 i < 2 * m i 2 * m 2 m i++ i++ i {
		    	road[i] = sc.nextInt();
		    } {
		    	road[i] = sc.nextInt();
		    } road[i] = sc.nextInt() road[i] road i sc.nextInt() sc.nextInt sc for(int i = 0; i < n; i++) {
		    	counter[i] = 0;
		    } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
		    	counter[i] = 0;
		    } {
		    	counter[i] = 0;
		    } counter[i] = 0 counter[i] counter i 0 for(int i = 0; i < 2*m; i++) {
		    	counter[road[i]-1]++;
		    } int i = 0; int i = 0; i 0 i < 2*m i 2*m 2 m i++ i++ i {
		    	counter[road[i]-1]++;
		    } {
		    	counter[road[i]-1]++;
		    } counter[road[i]-1]++ counter[road[i]-1] counter road[i]-1 road[i] road i 1 for(int i = 0; i < n; i++) {
		    	System.out.println(counter[i]);
		    } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
		    	System.out.println(counter[i]);
		    } {
		    	System.out.println(counter[i]);
		    } System.out.println(counter[i]) System.out.println System.out System System.out counter[i] counter i sc.close() sc.close sc String args[] args public static void saiki(int a, String b) {
		//再帰コーディングのお手本

		if(a == 0) {
			System.out.println(b);
		}else {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		}
	} saiki {
		//再帰コーディングのお手本

		if(a == 0) {
			System.out.println(b);
		}else {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		}
	} if(a == 0) {
			System.out.println(b);
		}else {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		} a == 0 a 0 {
			System.out.println(b);
		} System.out.println(b) System.out.println System.out System System.out b {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		} for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			} char ch = 'a'; char ch = 'a'; ch 'a' ch <= 'c' ch 'c' ch++ ch++ ch {
				saiki(a-1,b + ch);
			} {
				saiki(a-1,b + ch);
			} saiki(a-1,b + ch) saiki a-1 a 1 b + ch b ch int a a String b b public static  int gcd(int a, int b) {
	    if (a < b) {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    }

	    int r = -1;
	    while (r != 0) {
	        r = a % b;
	        a = b;
	        b = r;
	    }

	    return a;
	} gcd {
	    if (a < b) {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    }

	    int r = -1;
	    while (r != 0) {
	        r = a % b;
	        a = b;
	        b = r;
	    }

	    return a;
	} if (a < b) {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    } a < b a b {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    } int tmp = a; tmp a a = b a b b = tmp b tmp int r = -1; r -1 1 while (r != 0) {
	        r = a % b;
	        a = b;
	        b = r;
	    } r != 0 r 0 {
	        r = a % b;
	        a = b;
	        b = r;
	    } r = a % b r a % b a b a = b a b b = r b r return a; a int a a int b b public class Main {

	public static void main(String args[]) throws InterruptedException {
		    Scanner sc = new Scanner(System.in);

		    int n = sc.nextInt(); //都市
		    int m = sc.nextInt(); //道
		    int[] road = new int[2*m];
		    int[] counter = new int[n];
		    for(int i = 0; i < 2 * m; i++) {
		    	road[i] = sc.nextInt();
		    }
		    for(int i = 0; i < n; i++) {
		    	counter[i] = 0;
		    }
		    //入力
		    
		    for(int i = 0; i < 2*m; i++) {
		    	counter[road[i]-1]++;
		    }
		    //シミュレート
		    
		    for(int i = 0; i < n; i++) {
		    	System.out.println(counter[i]);
		    }
		    //出力
		    sc.close(); }

	public static void saiki(int a, String b) {
		//再帰コーディングのお手本

		if(a == 0) {
			System.out.println(b);
		}else {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		}
	}

	public static  int gcd(int a, int b) {
	    if (a < b) {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    }

	    int r = -1;
	    while (r != 0) {
	        r = a % b;
	        a = b;
	        b = r;
	    }

	    return a;
	}
} public class Main {

	public static void main(String args[]) throws InterruptedException {
		    Scanner sc = new Scanner(System.in);

		    int n = sc.nextInt(); //都市
		    int m = sc.nextInt(); //道
		    int[] road = new int[2*m];
		    int[] counter = new int[n];
		    for(int i = 0; i < 2 * m; i++) {
		    	road[i] = sc.nextInt();
		    }
		    for(int i = 0; i < n; i++) {
		    	counter[i] = 0;
		    }
		    //入力
		    
		    for(int i = 0; i < 2*m; i++) {
		    	counter[road[i]-1]++;
		    }
		    //シミュレート
		    
		    for(int i = 0; i < n; i++) {
		    	System.out.println(counter[i]);
		    }
		    //出力
		    sc.close(); }

	public static void saiki(int a, String b) {
		//再帰コーディングのお手本

		if(a == 0) {
			System.out.println(b);
		}else {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		}
	}

	public static  int gcd(int a, int b) {
	    if (a < b) {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    }

	    int r = -1;
	    while (r != 0) {
	        r = a % b;
	        a = b;
	        b = r;
	    }

	    return a;
	}
} Main
//intのオーバーフローに気をつけろ,AGCはだいたいlongにしておけ
//毎回余りを求めることでオーバーフローしなくなる
//nextLineよりnextだ
//charは''で囲うんだぞ
//読み込みは先に全部やっておけ
//for文を回す回数に気をつけろ
	//for文は10^3の三重はTLE,10^5の二重はTLE,10^9のforはTLE
//貪欲は使えるか？？試した？？

import java.util.Scanner;

public class Main {

	public static void main(String args[]) throws InterruptedException {
		    Scanner sc = new Scanner(System.in);

		    int n = sc.nextInt(); //都市
		    int m = sc.nextInt(); //道
		    int[] road = new int[2*m];
		    int[] counter = new int[n];
		    for(int i = 0; i < 2 * m; i++) {
		    	road[i] = sc.nextInt();
		    }
		    for(int i = 0; i < n; i++) {
		    	counter[i] = 0;
		    }
		    //入力
		    
		    for(int i = 0; i < 2*m; i++) {
		    	counter[road[i]-1]++;
		    }
		    //シミュレート
		    
		    for(int i = 0; i < n; i++) {
		    	System.out.println(counter[i]);
		    }
		    //出力
		    sc.close(); }

	public static void saiki(int a, String b) {
		//再帰コーディングのお手本

		if(a == 0) {
			System.out.println(b);
		}else {
			for(char ch = 'a'; ch <= 'c'; ch++) {
				saiki(a-1,b + ch);
			}
		}
	}

	public static  int gcd(int a, int b) {
	    if (a < b) {
	        int tmp = a;
	        a = b;
	        b = tmp;
	    }

	    int r = -1;
	    while (r != 0) {
	        r = a % b;
	        a = b;
	        b = r;
	    }

	    return a;
	}
}
