#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-12;
using namespace std;
struct Node {
  char x;
  int link[26];
  void init(char x) {
    memset(link, 0, sizeof(link));
    this->x = x;
  }
};
struct TrieTree {
  Node tree[N];
  int pos, root, queue[N];
  bool f[N], g[N];
  void init() {
    root = pos = 1;
    tree[root].init(' ');
  }
  int get(char x) { return x - 'a'; }
  void add(char *s) {
    int l = strlen(s);
    for (int i = 0, j = root; i < l; ++i) {
      if (!tree[j].link[get(s[i])]) {
        tree[tree[j].link[get(s[i])] = ++pos].init(s[i]);
      }
      j = tree[j].link[get(s[i])];
    }
  }
  void solve(bool odd) {
    int p1, p2;
    queue[p1 = p2 = 1] = root;
    while (p1 <= p2) {
      Node &t = tree[queue[p1++]];
      for (int i = 0; i < 26; ++i)
        if (t.link[i]) {
          queue[++p2] = t.link[i];
        }
    }
    bool flag, found;
    while (p2) {
      int cnt = 0;
      Node &t = tree[p1 = queue[p2--]];
      flag = false;
      found = false;
      for (int i = 0; i < 26; ++i)
        if (t.link[i]) {
          ++cnt;
          if (!f[t.link[i]]) flag = true;
          if (!g[t.link[i]]) found = true;
        }
      f[p1] = flag;
      g[p1] = (cnt == 0) || found;
    }
    if (f[root]) {
      if (!g[root]) {
        if (odd) {
          puts("First");
        } else
          puts("Second");
      } else {
        puts("First");
      }
    } else {
      puts("Second");
    }
  }
} Tree;
char str[N];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  Tree.init();
  for (int i = 1; i <= n; ++i) {
    scanf("%s", str);
    Tree.add(str);
  }
  Tree.solve(m & 1);
  return 0;
}
