Problem:
Score : 200 points

Problem Statement

N Snukes called Snuke 1, Snuke 2, ..., Snuke N live in a town.

There are K kinds of snacks sold in this town, called Snack 1, Snack 2, ..., Snack K. The following d_i Snukes have Snack i: Snuke A_{i, 1}, A_{i, 2}, \cdots, A_{i, {d_i}}.

Takahashi will walk around this town and make mischief on the Snukes who have no snacks. How many Snukes will fall victim to Takahashi's mischief?

Constraints

All values in input are integers.

1 \leq N \leq 100

1 \leq K \leq 100

1 \leq d_i \leq N

1 \leq A_{i, 1} < \cdots < A_{i, d_i} \leq N

Input

Input is given from Standard Input in the following format:

N K
d_1
A_{1, 1} \cdots A_{1, d_1}
\vdots
d_K
A_{K, 1} \cdots A_{K, d_K}

Output

Print the answer.

Sample Input 1

3 2
2
1 3
1
3

Sample Output 1

1

Snuke 1 has Snack 1.

Snuke 2 has no snacks.

Snuke 3 has Snack 1 and 2.

Thus, there will be one victim: Snuke 2.

Sample Input 2

3 3
1
3
1
3
1
3

Sample Output 2

2

Solution in C# (.NET Core 3.1.201) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

class Program
{
    #region library
    static bool debug = false;
    static int n = 0;
    static int m = 0;
    static int r = 0;
    static int c = 0;
    static int x = 0;
    static int y = 0;
    static string s = "";
    static string[] ss;
    static long sum = 0;
    static long cnt = 0;
    static long max = -1;
    static long min = 2147483647;
    static bool flg = false;
    static bool flg2 = false;
    static string alpha = "abcdefghijklmnopqrstuvwxyz";
    static long mod = 1000000007;
    static long[] arr;
    static char[,] map;
    static long[,] imap;
    public class Input
    {
        static readonly char[] separator = { ' ', '\r', '\n' };
        readonly StreamReader sr;
        readonly Queue<string> queue;

        public Input(string path = "")
        {
            queue = new Queue<string>();

            if (string.IsNullOrEmpty(path))
            {
                sr = new StreamReader(Console.OpenStandardInput());
            }
            else
            {
                sr = new StreamReader(path);
            }
        }

        public void SetText(IEnumerable<string> items)
        {
            foreach (var item in items)
            {
                SetText(item);
            }
        }

        public bool SetText(string s)
        {
            if (s == null) return false;

            foreach (var elem in s.Trim()
                .Split(separator, StringSplitOptions.RemoveEmptyEntries))
            {
                queue.Enqueue(elem);
            }

            return true;
        }

        public bool Any()
        {
            return queue.Any() || Read();
        }

        bool Read()
        {
            if (!SetText(sr.ReadLine())) return false;

            if (!queue.Any()) return Read();

            return queue.Any();
        }

        public string Next()
        {
            if (!queue.Any() && !Read())
            {
                return "";
            }

            return queue.Dequeue();
        }

        bool Accumulate(int n)
        {
            while (queue.Count() < n)
            {
                if (!Read()) return false;
            }

            return true;
        }

        public int NextInt()
        {
            return int.Parse(Next());
        }
        public long NextLong()
        {
            return long.Parse(Next());
        }
        public double NextDouble()
        {
            return double.Parse(Next());
        }

        T[] NextT<T>(int n, T offset, Func<string, T> parse, Func<T, T, T> add)
        {
            if (!Accumulate(n)) return null;

            var a = new T[n];

            for (int i = 0; i < n; i++)
                a[i] = add(parse(queue.Dequeue()), offset);

            return a;
        }

        public string[] Next(int n)
        {
            return NextT(n, "", x => x, (x, y) => x);
        }
        public int[] NextInt(int n, int offset = 0)
        {
            return NextT(n, offset, int.Parse, (x, y) => x + y);
        }
        public long[] NextLong(int n, long offset = 0)
        {
            return NextT(n, offset, long.Parse, (x, y) => x + y);
        }
        public double[] NextDouble(int n, double offset = 0.0)
        {
            return NextT(n, offset, double.Parse, (x, y) => x + y);
        }
    }
    static Input input;
    static int Int()
    {
        return input.NextInt();
    }
    static long Long()
    {
        return input.NextLong();
    }
    static double Double()
    {
        return input.NextDouble();
    }
    static string Text()
    {
        return input.Next();
    }
    static void wl(object obj = null)
    {
        Console.WriteLine(obj);
    }
    static void w(object obj)
    {
        Console.Write(obj);
    }
    static void Yes()
    {
        wl("YES");
    }
    static void No()
    {
        wl("NO");
    }
    static void Sum()
    {
        wl(sum);
    }
    static void Cnt()
    {
        wl(cnt);
    }
    static void SetArray(long num = -1)
    {
        if (n == 0)
        {
            n = Int();
        }
        arr = new long[n];
        for (int i = 0; i < n; i++)
        {
            if (num == -1)
                arr[i] = Int();
            else
                arr[i] = num;
        }
    }
    static void ShowArray()
    {
        for (int i = 0; i < arr.Length; i++)
        {
            if (i > 0) w(" ");
            w(arr[i]);
        }
        wl();
    }
    static void SetMap(char def = '@')
    {
        if (r == 0 && c == 0)
        {
            r = Int();
            c = Int();
        }
        map = new char[r, c];
        for (int i = 0; i < r; i++)
        {
            if (def == '@') s = Text();
            for (int j = 0; j < c; j++)
            {
                map[i, j] = (def == '@') ? s[j] : def;
            }
        }
    }
    static void SetIMap(long def = -1)
    {
        if (r == 0 && c == 0)
        {
            r = Int();
            c = Int();
        }
        imap = new long[r, c];
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                imap[i, j] = (def == -1) ? Int() : def;
            }
        }
    }
    static void ShowMap()
    {
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                w(map[i, j]);
            }
            wl();
        }
    }
    static void ShowIMap()
    {
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                w(imap[i, j]);
            }
            wl();
        }
    }
    #endregion

    #region main
    static void Main(string[] args)
    {
        var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        input = new Input();
        try
        {
            Solve();
        }
        catch(Exception ex)
        {
            if (debug)
                wl(ex); //chcp 65001
            else
                throw ex;
        }
        Console.Out.Flush();
    }

    public static void Solve()
    {
        n = Int();
        int[] arr = new int[n];

        int k = Int();
        for (int i = 0; i < k; i++)
        {
            int d = Int();
            for (int j = 0; j < d; j++)
            {
                int m = Int();
                arr[m - 1]++;
            }
        }

        for (int i = 0; i < n; i++)
        {
            if (arr[i] == 0) cnt++;
        }
        Cnt();
    }



    #endregion
}