#include <bits/stdc++.h>
using namespace std;
const long double EPS = 0.0000001;
const long double PI = 3.14159265358979323846;
inline int lg2(long long n) {
  int h = 0;
  while ((1 << h) < n) ++h;
  return h;
}
struct configio {
  configio() {
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);
  }
} cnfio;
struct vert {
  bool leaf = false;
  bool win = false, loose = false;
  map<char, int> next;
};
const int ml = 1e5 + 1000;
int last = 0;
vert trie[ml];
bool isleaf(int v) { return trie[v].next.empty(); }
void add(const string& str) {
  int v = 0;
  for (int i = 0; i < str.length(); ++i) {
    char c = str[i];
    if (trie[v].next.count(c) == 0) {
      trie[v].next[c] = ++last;
    }
    v = trie[v].next[c];
  }
}
void dfs(int v) {
  if (isleaf(v)) {
    trie[v].leaf = true;
    trie[v].loose = true;
    return;
  }
  for (auto it : trie[v].next) {
    dfs(it.second);
    if (trie[it.second].win == false) {
      trie[v].win = true;
    }
    if (trie[it.second].loose == false) {
      trie[v].loose = true;
    }
  }
}
int main() {
  int n, k;
  string tmp;
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    cin >> tmp;
    add(tmp);
  }
  dfs(0);
  bool win = trie[0].win;
  bool loose = trie[0].loose;
  if (win == false) {
    cout << "Second" << endl;
    return 0;
  }
  if (win && loose) {
    cout << "First" << endl;
    return 0;
  }
  if (win && !loose) {
    cout << (k & 1 ? "First" : "Second") << endl;
    return 0;
  }
  return 0;
}
