/*
TASK: matrix
LANG: C++
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int ma3x[1024][1024];
int size;

int cmp(const void *a, const void *b) {
	if (*(int*)a < *(int*)b) {
		return -1;
	} else if (*(int*)a > *(int*)b) {
		return 1;
	} else {
		return 0;
	}
}

int main() {
	int i, j, m, n, row[1024], k, ok;
	scanf("%i %i", &n, &m);
	i = 0;
	while (i < n) {
		j = 0;
		while (j < m) {
			scanf("%i", &row[j]);
			j++;
		}
		qsort(row, m, sizeof(int), cmp);
		ok = 1;
		k = 0;
		while (k < size) {
			if (memcmp(row, ma3x[k], sizeof(int)*m) == 0) {
				ok = 0;
				break;
			}
			k++;
		}
		if (ok) {
			memcpy(ma3x[size++], row, sizeof(int)*m);
		}
		i++;
	}
	printf("%i\n", size);
	return 0;
}
