Andrew, Fedor and Alex are inventive guys. Now they invent the game with strings for two players.

Given a group of n non-empty strings. During the game two players build the word together, initially the word is empty. The players move in turns. On his step player must add a single letter in the end of the word, the resulting word must be prefix of at least one string from the group. A player loses if he cannot move.

Andrew and Alex decided to play this game k times. The player who is the loser of the i-th game makes the first move in the (i + 1)-th game. Guys decided that the winner of all games is the player who wins the last (k-th) game. Andrew and Alex already started the game. Fedor wants to know who wins the game if both players will play optimally. Help him.

Input

The first line contains two integers, n and k (1 ≤ n ≤ 105; 1 ≤ k ≤ 109).

Each of the next n lines contains a single non-empty string from the given group. The total length of all strings from the group doesn't exceed 105. Each string of the group consists only of lowercase English letters.

Output

If the player who moves first wins, print "First", otherwise print "Second" (without the quotes).

Examples

Input

2 3
a
b


Output

First


Input

3 1
a
b
c


Output

First


Input

1 2
ab


Output

Second
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;

public class CF2_260D {
  
  static Reader sc = new Reader();
  static PrintWriter out = new PrintWriter(System.out);
  
  public static void main(String[] args) throws IOException {
    int n = sc.nextInt();
    int k = sc.nextInt();
    
    Trie t = new Trie();
    
    for (int i = 0; i < n; i++) {
      t.add(sc.next(), 0);
    }
    
    // Odd length prevails
    boolean[] res = t.canForceWinOrLose(); 
    if (!res[0]) {
      out.println("Second");
    } else {
      if (k % 2 == 0 && !res[1]) {
        out.println("Second");
      } else {
        out.println("First");
      }
    }
    out.close();
  }
  
  static final char minChar = 'a'; // 'A' or 'a'
  
  static class Trie {
    final Trie[] t = new Trie[26]; // Only letters, change accordingly

    void add(final String n, final int index) {
      if (index >= n.length())
        return;
      final int c = n.charAt(index) - minChar;
      if (t[c] == null) {
        t[c] = new Trie();
      }
      t[c].add(n, index + 1);
    }

    boolean hasPrefix(final String n, final int index) {
      if (index >= n.length())
        return true;
      final int c = n.charAt(index) - minChar;
      if (t[c] != null) {
        return t[c].hasPrefix(n, index + 1);
      }
      return false;
    }
    
    boolean[] canForceWinOrLose() {
      boolean[] forceWL = new boolean[2];
      boolean noNext = true;
      for (int i = 0; i < 26; i++) {
        boolean[] curWL = null;
        
        if (t[i] != null) {
          noNext = false;
          curWL = t[i].canForceWinOrLose();
          if (!curWL[0] && curWL[1]) {
            forceWL[0] = true;
          }
          if (curWL[0] && !curWL[1]) {
            forceWL[1] = true;
          }
          
          if (!curWL[0] && !curWL[1]) {
            forceWL[0] = true;
            forceWL[1] = true;
          }
        }
      }
      
      if (noNext) {
        forceWL[0] = false; // It's her turn, Only can force Lose
        forceWL[1] = true;
      }
      return forceWL;
    }
  }
  static class Reader {
    final private int BUFFER_SIZE = 1 << 12;private byte[] buffer;private int bufferPointer, bytesRead;private boolean reachedEnd = false;public Reader() {buffer = new byte[BUFFER_SIZE];bufferPointer = 0;bytesRead = 0;}
    public boolean hasNext() {return !reachedEnd;} private void fillBuffer() throws IOException {bytesRead = System.in.read(buffer, bufferPointer = 0, BUFFER_SIZE);if (bytesRead == -1) {buffer[0] = -1;reachedEnd = true;}}
    private void consumeSpaces() throws IOException {while (read() <= ' ' && reachedEnd == false);bufferPointer--;} private byte read() throws IOException {if (bufferPointer == bytesRead) {fillBuffer();}return buffer[bufferPointer++];}
    public String next() throws IOException {StringBuilder sb = new StringBuilder();consumeSpaces();byte c = read();do {sb.append((char) c);} while ((c = read()) > ' ');consumeSpaces();if (sb.length() == 0) {return null;}return sb.toString();}
    public String nextLine() throws IOException {StringBuilder sb = new StringBuilder();byte c;boolean read = false;while ((c = read()) != -1) {if (c == '\n') {read = true;break;}if (c >= ' ')sb.append((char) c);}if (!read) {return null;}return sb.toString();}
    public int nextInt() throws IOException {consumeSpaces();int ret = 0;      byte c = read();boolean neg = (c == '-');if (neg) {c = read();}do {ret = ret * 10 + c - '0';} while ((c = read()) >= '0' && c <= '9');consumeSpaces();if (neg) {return -ret;}return ret;}
    public long nextLong() throws IOException {consumeSpaces();long ret = 0;byte c = read();boolean neg = (c == '-');if (neg) {c = read();}do {ret = ret * 10L + c - '0';} while ((c = read()) >= '0' && c <= '9');consumeSpaces();if (neg) {return -ret;}return ret;}
    public double nextDouble() throws IOException {double ret = 0;double div = 1;byte c = read();consumeSpaces();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);}}consumeSpaces();if (neg) {return -ret;}return ret;}    public int[] nextIntArray(int n) throws IOException {int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = nextInt();}return a;}
    public int[][] nextIntMatrix(int n, int m) throws IOException {int[][] grid = new int[n][m];for (int i = 0; i < n; i++) {grid[i] = nextIntArray(m);}return grid;}
    public char[][] nextCharacterMatrix(int n) throws IOException {char[][] a = new char[n][];for (int i = 0; i < n; i++) {a[i] = next().toCharArray();}return a;}
    public void close() throws IOException {if (System.in == null) {return;} else {System.in.close();}}
  }
  
  static void print(int[] A) {for (int i = 0; i < A.length; i++) {if (i != 0) {out.print(' ');}out.print(A[i]);}out.println();}
  static <T> void print(Iterable<T> A) {int i = 0;for (T act : A) {if (i != 0) {out.print(' ');}out.print(act);i++;}out.println();}
  static void printPlus1(Iterable<Number> A) {int i = 0;for (Number act : A) {if (i != 0) {out.print(' ');}out.print(act.longValue() + 1L);i++;}out.println();  }
  static void debug(Object... o) {System.err.println(Arrays.deepToString(o));}
  
  /*
  long s = System.currentTimeMillis();
  debug(System.currentTimeMillis() - s + "ms");
   */
}
