#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long int n, k, m, res = 0, sm = 0, edge = -1, nb = 1, ans = 0;
;
set<pair<pair<long long int, long long int>, long long int> > st, st1, st2;
set<long long int> stres;
string s, s1, s2, s3, s4;
vector<long long int> vv[200050], vp, vans, v3;
vector<pair<long long int, long long int> > v[50005], vv1, adj, v1, v2;
vector<pair<int, pair<long long int, long long int> > > vvv;
priority_queue<pair<pair<long long int, long long int>, long long int> > pq;
set<pair<pair<long long int, long long int>, long long int> >::iterator it, it1,
    it2;
map<string, long long int> mpwin, mplose;
int voyel(char c) {
  if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y')
    return 1;
  return 0;
}
const int MAX_CHAR = 26;
struct trie {
  trie* child[MAX_CHAR];
  bool isLeaf;
  int prefix_count;
  trie() {
    memset(child, 0, sizeof(child));
    isLeaf = 0;
    prefix_count = 0;
  }
  void insert(string str, long long int i) {
    if (i == str.size()) {
      prefix_count++;
      isLeaf = 1;
    } else {
      int cur = str[i] - 'a';
      if (child[cur] == 0) child[cur] = new trie();
      child[cur]->prefix_count++;
      child[cur]->insert(str, i + 1);
    }
  }
  bool wordExist(string str, long long int i) {
    if (i == str.size()) return isLeaf;
    int cur = str[i] - 'a';
    if (child[cur] == 0) return false;
    return child[cur]->wordExist(str, i + 1);
  }
  bool mrigl(string str, long long int i) {
    if (i == str.size()) {
      for (long long int i = 0; i < 26; i++)
        if (child[i] != 0) return 0;
      return 1;
    }
    int cur = str[i] - 'a';
    if (child[cur] == 0) return false;
    return child[cur]->mrigl(str, i + 1);
  }
  bool prefixExist(string str, long long int i) {
    if (i == str.size()) return true;
    int cur = str[i] - 'a';
    if (child[cur] == 0) return false;
    return child[cur]->prefixExist(str, i + 1);
  }
  long long int word_with_prefix(string s, long long int i) {
    if (i == s.size()) return this->prefix_count;
    int cur = s[i] - 'a';
    if (child[cur] == 0) return 0;
    return child[cur]->word_with_prefix(s, i + 1);
  }
};
trie root;
long long int solvewin(string s) {
  if (!root.prefixExist(s, 0) && s != "") {
    return 0;
  }
  for (char c = 'a'; c <= 'z'; c++) {
    if (root.prefixExist(s + c, 0) && !solvewin(s + c)) return 1;
  }
  return 0;
}
long long int solvelose(string s) {
  if (root.mrigl(s, 0)) return 1;
  for (char c = 'a'; c <= 'z'; c++) {
    if (root.prefixExist(s + c, 0) && !solvelose(s + c)) return 1;
  }
  return 0;
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long int i = 0, j = 0, x, y, z = 0, mx = 0, nb0 = 0, nb1 = 0, nbmax = 0,
                nbinf = 0, mm = 5e9, idx = 0, ok = 0, l, r, negatif = 0,
                positif = 0, q, d, res1 = 0;
  char c;
  cin >> m >> k;
  for (j = 1; j <= m; j++) {
    cin >> s;
    root.insert(s, 0);
    s1 = "";
    mpwin[s1] = -1;
    mplose[s1] = -1;
    for (i = 0; i < s.size(); i++) {
      s1 += s[i];
      mpwin[s1] = -1;
      mplose[s1] = -1;
    }
  }
  long long int win = solvewin("");
  long long int lose = solvelose("");
  if (win && lose)
    cout << "First";
  else if (win) {
    if (k % 2)
      cout << "First";
    else
      cout << "Second";
  } else
    cout << "Second";
  return 0;
}
